故事の背景
俗话说的好,早睡早起方能养生„„鸡腿终于结束了建小路的工程,他终于有时间出来玩啦鸡腿决定来找你玩他刚发明的新式游戏
问题の描述
鸡腿想到了一个很高(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;
}