2017.1.20【初中部 】普及组模拟赛C组 鸡腿の游戏 题解

本文介绍了一个双人游戏的策略分析过程,玩家需要通过选择01串中的列来获取分数,最终得分高者获胜。文章提供了具体的输入输出示例,并详细解释了如何通过排序和枚举的方法来确定最优策略。

原题:

http://172.16.0.132/junior/#contest/show/1370/3

题目描述:

故事の背景:
俗话说的好,早睡早起方能养生,鸡腿终于结束了建小路的工程,他终于有时间出来玩啦,鸡腿决定来找你玩他刚发明的新式游戏

问题の描述:
鸡腿想到了一个很高(sha)明(bi)的游戏。给定一个N,然后写出两个长度为N*2的01串上下对应。每次呢鸡腿先走,他可以选择一列,如果上面那个是1他就得一分否则不得分。然后你走,你也选择一列,下面那个是1你就得一分否则不得分。选过的列不能再选,所有的列都被选了就结束了!最后谁得分最高谁获胜。

输入:

第一行两个整数N。
第2行和第3行,每行一个长度为2*N的01串。

输出:

一行一个字符串,如果鸡腿赢输出“First”,如果你赢输出“Second”,平局输出“Draw”。

样例输入:

样例输入1:
2
0111
0001

样例输入2:
3
110110
001001

样例输入3:
4
01100000
10010011

样例输出:

样例输出1:
First

样例输入2:
First

样例输出3:
Second

数据范围限制:

对于50%的数据:0 < N ≤ 5000;
100%的数据:0 < N ≤ 10^6。

分析:

从大到小排序,接着枚举判断;

实现:

var 
    n,i,t1,t2:longint;
    s1,s2:ansistring;
procedure kp(x,y:longint);
var
    i,j:longint;
    mid,mid1,t:char;
begin
    i:=x;
    j:=y;
    mid:=s1[x];
    mid1:=s2[x];
    repeat
        while (s1[j]<mid)or(s1[j]=mid)and(s2[j]<mid1) do dec(j);
        while (s1[i]>mid)or(s1[i]=mid)and(s2[i]>mid1) do inc(i);
        if i<=j then
        begin
            t:=s1[i];
            s1[i]:=s1[j];
            s1[j]:=t;
            t:=s2[i];
            s2[i]:=s2[j];
            s2[j]:=t;
            inc(i);
            dec(j);
        end;
    until i>j;
    if x<j then kp(x,j);
    if i<y then kp(i,y);
end;
begin
    assign(input,'game.in');reset(input);
    assign(output,'game.out');rewrite(output);
    readln(n); readln(s1); readln(s2);
    kp(1,2*n);
    for i:=1 to 2*n do 
    begin
        if s1[i]='1' then
            if s2[i]='1' then 
                if i mod 2=1 then inc(t1) else inc(t2)
            else inc(t1)
        else 
            if s2[i]='1' then inc(t2);
    end;
    if t1>t2 then writeln('First')
    else
        if t1<t2 then writeln('Second') else writeln('Draw');
    close(input);close(output);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值