题目大意:(文末有原题)
DA与NET玩游戏,给一个01串,他们只能删除 相邻的两个不同字符,DA先删,如果一个人没法删除,这个人就输了,判断最后谁会获胜;
思路:
因为是01串,所以能删多少次,与字符串的位置没有关系(只要既有1又有0,总会有相邻的01),所以只需判断有几个01对;
代码:
#include <iostream> #include <cstring> using namespace std; int main() { int t; cin >> t; while(t--) { char c[1010]; cin >> c; int len = strlen(c), s1 = 0, s0 = 0; for(int i = 0; i < len; i++) { if(c[i] == '1') s1++; else s0++; } if(s1 < s0) { if(s1 % 2) cout << "DA" << endl; else cout << "NET" << endl; }else { if(s0 % 2) cout << "DA" << endl; else cout << "NET" << endl; } } return 0; }//比赛时候把cin写在取长度len之后了,惨遭hacking(ಥ_ಥ)
题目:
Alica and Bob are playing a game.
Initially they have a binary string s consisting of only characters 0 and 1.
Alice and Bob make alternating moves: Alice makes the first move, Bob makes the second move, Alice makes the third one, and so on. During each move, the current player must choose two different adjacent characters of string s and delete them. For example, if s=1011001 then the following moves are possible:
delete s1 and s2: 1011001→11001;delete s2 and s3: 1011001→11001;delete s4 and s5: 1011001→10101;delete s6 and s7: 1011001→10110.If a player can't make any move, they lose. Both players play optimally. You have to determine if Alice can win.
输入:
First line contains one integer t (1≤t≤1000) — the number of test cases.
Only line of each test case contains one string s (1≤|s|≤100), consisting of only characters 0 and 1.
输出:
For each test case print answer in the single line.
If Alice can win print DA (YES in Russian) in any register. Otherwise print NET (NO in Russian) in any register.
样例:
Input:
3 01 1111 0011
Output:
DA NET NET
Note
In the first test case after Alice's move string s become empty and Bob can not make any move.
In the second test case Alice can not make any move initially.
In the third test case after Alice's move string s turn into 01. Then, after Bob's move string s become empty and Alice can not make any move.