jzoj 2017.9.16 模拟赛

来源:互联网 发布:inpaint mac破解版 编辑:程序博客网 时间:2024/06/06 08:27

T1:
纸牌游戏:
Bessie拿了一副有2n张卡片的牌和她的朋友Elsie玩,牌上的数字编号为1- 2n ,并将其均分成两份,一份卡片给Bessie 和一份卡片给Elsie。
然后两人开始玩牌,一共进行n轮,在每一轮中,Bessie 和Elsie 都打一张卡,谁的牌大就得一分。
Bessie 可以预测Elsie 打牌顺序,并且尽可能的想赢取胜利。请确定Bessie可以赢得的最大点数。

1≤N≤50,000
题解:
枚举+贪心:
直接用一个桶记录bessie的牌是什么,elsie的牌是什么,然后枚举i,j
因为2*N最大是2*50000,即100000
所以最大枚举100000次,
因为bessie要赢更多的点数!所以我们要贪心:
即用大于elsie的牌j的牌i要满足在bessie的牌中大于j且最小
挺容易实现的
时间复杂度:O(N)

var   a:Array [0..100001] of boolean;   b:Array [0..100001] of boolean;   i,j,x,n,ans:longint;begin   readln(n);   for i:=1 to n do     begin           readln(x);           a[x]:=true;     end;   for i:=1 to 2*n do     if not(a[i]) then b[i]:=true;   i:=1; j:=1; ans:=0;   while (i<=2*n) and (j<=2*n) do   begin        while (not(a[i])) and (i<2*n) do inc(i);        while (not(b[j])) and (j<2*n) do inc(j);        if (a[i]) and (b[j]) and (j>i) then           begin                 inc(i);                 inc(j);                 inc(ans);           end           else inc(j);   end;   writeln(ans);end.

T2:
田忌赛马:
“一天,田忌决定跟他的马比赛跑步……”
赛前,田忌感到非常恐慌,因为他不知道究竟是他跑得快还是马跑得快。他希望比较自己的速度v1与马的速度v2,如果马的速度比他快,那么他就会很无耻地取消比赛……

30%的数据:0≤v1,v2≤2147483647;
100%的数据:0≤v1,v2≤10^32768-1。

题解:
因为位数关系 所以用字符串;
先比长度,长度相同比按字典序直接比大小,
因为字符串中数字字符的大小顺序就是0..9从小到大。

var    s,t:ansistring;    ls,lt:longint;begin    readln(s);    readln(t);    ls:=length(s);    lt:=length(t);    if ls>lt then writeln('Yes')             else if (ls=lt) and (s>t) then writeln('Yes')                                       else writeln('No');end.

T3:
环:
有一个圆,1 ~ N共N个数在圆环上顺时针排列着。
现在给你a, b, c三个数,问a → b → c的顺序是顺时针还是逆时针。
这里写图片描述
如图,1 → 4 → 2的顺序是逆时针。

100%的数据:1 ≤ a, b, c ≤ N ≤ 10^9,保证a, b, c之间两两互不相等。

题解:
找规律:
这题不难发现
a –> b –> c 为 顺时针
①a < b那么b–>c必须要右转才能满足!
②a > b那么b–>c也必须要右转才能满足!
这2次右转,因为a–>b 指向的问题,
①要转上半圈
②要转下半圈
而逆时针同理,推推就知道了。
时间复杂度:O(1)

var    n,a,b,c:longint;begin    readln(n,a,b,c);    if a>b then       begin          if (c>a) or (c<b) then writeln('0')                            else writeln('1');       end       else begin               if (c>b) or (c<a) then writeln('1')                                 else writeln('0');            end;end.

T4:
愤怒的奶牛:
有 n 捆位于不同整数位置 X1,X2,… Xn 的干草。如果奶牛撞击位于 x 位置上的干草包,那么 x 位置上的干草就会被引爆,并且这个干草包爆炸的“爆炸半径”为 1,这意味着任何其他干草包在一个单位的距离内也被引爆。然后这些相邻的包子自身爆炸同事也会引爆它边上的干草,每个爆炸半径都为 2,所以这些爆炸可能会将另外相距最多 2 个距离的未爆炸的干草继续引爆。在下一个时间步骤中,这些包也会以引爆半径 3 来引爆其它干草。每增加一次连锁爆炸,那么引爆半径就增加 1.
你的任务就是确定奶牛应该撞击哪个干草包,最后能引爆最多的干草包。

1 ≤ n≤100
干草包的位置x(0≤x≤1000000000)

题解:
这题,不要去看他位置的大小,因为N那么小,可以枚举!
然后每次枚举撞一个草包x,模拟求出向左最多能爆到的数l,向右同理,求出r.
然后在N个里面找出大小在[l,r]之间的x,求出数量sum,在N次枚举中找max{sum},即ans

时间复杂度:O(N^2)

var    a,b:Array [0..101] of longint;    n,i,j,k,p,l,r,sum,ans:longint;    p1,p2,d:boolean;begin    readln(n);    for i:=1 to n do readln(a[i]);    for i:=1 to n do    begin          b:=a; p:=1;          l:=a[i]; p1:=true;          while p1 do          begin               p1:=false;               k:=maxlongint;               for j:=1 to n do                 if (b[j]<>-1) and (i<>j) then                    if (b[j]>=l-p) and (b[j]<=l) then                    begin                       if k>b[j] then k:=b[j];                       b[j]:=-1;                       p1:=true;                    end;               if k<>maxlongint then               begin                   inc(p);                   l:=k;               end;          end;          l:=l-p+1;          b:=a; p:=1;          r:=a[i]; p2:=true;          while p2 do          begin               p2:=false;               k:=-1;               for j:=1 to n do                 if (b[j]<>-1) and (i<>j) then                    if (b[j]>=r) and (b[j]<=r+p) then                    begin                       if b[j]>k then k:=b[j];                       b[j]:=-1;                       p2:=true;                    end;               if k<>-1 then               begin                   inc(p);                   r:=k;               end;          end;          r:=r+p-1;          sum:=0;          for j:=1 to n do            if (a[j]>=l) and (a[j]<=r) then inc(sum);          if sum>ans then ans:=sum;    end;    writeln(ans);end.
原创粉丝点击