首页 > 其他分享 >Codeforces Round #814 (Div. 2) A-D2

Codeforces Round #814 (Div. 2) A-D2

时间:2022-08-25 23:58:46浏览次数:117  
标签:int D2 cin while tag solve 倍数 Div 814

A:Chip Game

题意:只能向上走和向右走,走到右上角,最后一步谁操作谁就赢

只要判断 总步数 的奇偶性就可以了

 
//-------------------------代码----------------------------
 
//#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;
}
 
/*样例区
 
 
*/
 
//------------------------------------------------------------

 

B:Mathematical Circus

题意:给定 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;
}

/*样例区


*/

//------------------------------------------------------------

 

标签:int,D2,cin,while,tag,solve,倍数,Div,814
From: https://www.cnblogs.com/er007/p/16626212.html

相关文章