Codeforces Round #770 (Div. 2)

Posted on 2022-02-10 17:19  Capterlliar  阅读(50)  评论(0编辑  收藏  举报

这场好好玩,每道题都有一个小彩蛋,放上来好了。

B. Fortune Telling

Haha, try to solve this, SelectorUnlimited!
— antontrygubO_o

题意:给出两个数x、x+3、数组a和目标y。对于每一个ai,可以选择加或者异或。问x和x+3哪个能变成y。

解:既然只是问哪个能,并且有且只有一个数能变成y,那大概率是找一个关键点。异或涉及位运算,初始给的x和x+3最后一位一定不同。异或是不进位的加法,随便挑两个数手模一下也是只有最后一位,对于无论哪个操作来说答案是肯定的。那问题解决了,哪个数操作完和y最后一位一样挑哪个。

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define maxx 200005
#define maxn 1005
#define maxm 305
#define eps 0.00000001
#define inf 0x7fffffff
#define mod 998244353
//#define int long long
ll n,x,y;
ll a[maxx];
signed main() {
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%lld%lld%lld",&n,&x,&y);
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        ll ans=0;
        y%=2;
        for(int i=1;i<=n;i++)
            ans=(ans+a[i])%2;
        if((x+ans)%2==y)
            printf("Alice\n");
        else
            printf("Bob\n");
    }
    return 0;
}
//9 62
View Code

C. OKEA

People worry that computers will get too smart and take over the world, but the real
problem is that they're too stupid and they've already taken over the world.
— Pedro Domingos

题意:给出一个n*k的矩阵,将1-n*k填入矩阵中,要求对于每一行中任意一段连续的数,其平均值是一个整数。

解:肉眼可见k=1时的解。先考虑每2个数。两个数之和要是偶数,那么不可能为一奇一偶,也就是说,每行只能由奇数或偶数组成,因此当n为奇数且k不为1时无解。很自然地会想到这么分:

1 3 5 7 9 11

2 4 6 8 10 12

惊喜地发现好像确实连着的每段数都满足要求。证明的话等差数列就可以,略。

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define maxx 200005
#define maxn 1005
#define maxm 305
#define eps 0.00000001
#define inf 0x7fffffff
#define mod 998244353
//#define int long long
int n,k;
signed main() {
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&k);
        if(k==1){
            printf("YES\n");
            for(int i=1;i<=n;i++)
                printf("%d\n",i);
            continue;
        }
        if(n%2==1){
            printf("NO\n");
            continue;
        }
        printf("YES\n");
        for(int i=0;i<n/2;i++){
            for(int j=1+i*k*2;j<=2*k-1+i*k*2;j+=2)
                printf("%d ",j);
            printf("\n");
            for(int j=2+i*k*2;j<=2*k+i*k*2;j+=2)
                printf("%d ",j);
            printf("\n");
        }
    }
    return 0;
}
//9 62
View Code

 

夕阳的余晖落在白墙上,打出水彩般澄澈的橘黄,很好看。

— 本文无聊的作者