Codeforces Round #814 (Div. 2) A-D2
题意:只能向上走和向右走,走到右上角,最后一步谁操作谁就赢
只要判断 总步数 的奇偶性就可以了
//-------------------------代码---------------------------- //#define int ll const int N = 1e5+10; int n,m; void solve() { cin>>n>>m; int sum = 0; sum = n - 1 + m - 1; if(sum % 2 == 0) { cout<<"Tonya"<<endl; } else { cout<<"Burenka"<<endl; } } void main_init() {} signed main(){ AC();clapping();TLE; cout<<fixed<<setprecision(12); main_init(); // while(cin>>n,n) // while(cin>>n>>m,n,m) int t;cin>>t;while(t -- ) solve(); // {solve(); } return 0; } /*样例区 */ //------------------------------------------------------------
题意:给定 n (偶数)和 k ,【1,n】 任意取出所有数对 (x,y) 且 都 满足 (x + k) * y % 4 == 0
%4 = 0,说明 (x + k) 和 y 要么两个都是 2的倍数,要么其中一个是4的倍数
1. k 奇数 ,奇偶互取, 就可以实现两个数都变成偶数
2. k 是2的倍数,将所有 4 的倍数 取出,再取出所有 2 的倍数让它们加上k,就可以实现每个数对都是 4 的倍数
3. k 是4的倍数,奇数+k = 奇数,2的倍数+k 也变不成 4的倍数,只有原来就是 4 的倍数的数可以和别的数组成 数对,但是数量太少了,所以不行
void solve() { cin>>n>>m; if(m % 2 == 1) { YES; fo(i,1,n) { cout<<i<<' '<<i+1<<endl; i ++ ; } } else { if(m % 4 == 0) { cout<<"NO"<<endl; } else { YES; for(int i = 4;i<=n;i+=4) { cout<<i-1<<' '<<i<<endl; } for(int i = 2;i<=n;i+=4) { cout<<i<<' '<<i-1<<endl; } } } } void main_init() {} signed main(){ AC();clapping();TLE; cout<<fixed<<setprecision(12); main_init(); // while(cin>>n,n) // while(cin>>n>>m,n,m) int t;cin>>t;while(t -- ) solve(); // {solve(); } return 0; } /*样例区 */ //------------------------------------------------------------
D1/2
题意: n 个数,在[l + r / 2] 向上取整区间内 异或上任意数 x ,问多少次能将他们全变成 0
https://zhuanlan.zhihu.com/p/554579826
最终答案是:贪心 找出 异或和为0 的区间,且区间不相交,使区间数最少,一开始有n次,直接用set 从当前区间开始到当前区间结束的 所有异或值, 如果有 已经包含在set里的,就减少一次。
//-------------------------代码---------------------------- //#define int ll const int N = 1e5+10; int n,m; void solve() { cin>>n; int res = 0; set<int> s; int tag = 0; s.insert(0); fo(i,1,n) { int x;cin>>x; tag ^= x; if(s.count(tag)) s.clear(),s.insert(0),tag = 0; else s.insert(tag),res ++ ; } cout<<res<<endl; } void main_init() {} signed main(){ AC();clapping();TLE; cout<<fixed<<setprecision(12); main_init(); // while(cin>>n,n) // while(cin>>n>>m,n,m) int t;cin>>t;while(t -- ) solve(); // {solve(); } return 0; } /*样例区 */ //------------------------------------------------------------