鸡腿の游戏_纪中1737

55 篇文章 0 订阅

故事の背景


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

问题の描述


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

输入


第一行两个整数N。

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

输出


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

数据の规模


对于50%的数据:0 < N ≤ 5000;

100%的数据:0 < N ≤ 10^6。

题目の解


感觉这样写好中二的说
一秒题
首先两人的策略都是优先选择两行都是1的列 (显然利己害人)
那么答案就很明确了,如果第一列1的数量多就First,第二列多就Second,一样多就看共有的是否为偶数
顺便提一下小学生zy的解法是错的能随便hack掉呢

コード


#include <stdio.h>
#include <string.h>
#define rep(i, st, ed) for (int i = st; i <= ed; i += 1)
#define fill(x, t) memset(x, t, sizeof(x))
#define L 2017038
using namespace std;
char x[L], y[L];
int main(void){
    freopen("game.in", "r", stdin);
    freopen("game.out", "w", stdout);

    int n;
    scanf("%d%s%s", &n, x + 1, y + 1);
    int totX = 0, totY = 0, totBoth = 0;
    rep(i, 1, n << 1){
        totX += x[i] - '0';
        totY += y[i] - '0';
        totBoth += (x[i] - '0') & (y[i] - '0');
    }
    if (totX > totY){
        printf("First\n");
    }else if (totX < totY){
        printf("Second\n");
    }else if (totX == totY){
        if (totBoth % 2 == 0){
            printf("Draw\n");
        }else{
            printf("First\n");
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值