这场好好玩,每道题都有一个小彩蛋,放上来好了。
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
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
夕阳的余晖落在白墙上,打出水彩般澄澈的橘黄,很好看。
— 本文无聊的作者