Codeforces Round #770 (Div. 2) B和C 题解
1634B - Fortune Telling
题意 :
t组数据 每组数据给定n x k 下一行在给定包含n个整数的一串数组a
求 x和x+3 那个数通过与数组a中的数进行加法或亦或运算后可以得到k 题目保证两个数中有且只有一个成功
思路 :
我们可以发现异或运算和加法运算有一个共同点 就是一个数与奇数相加或亦或它的奇偶性都会发生改变
那么利用这一特点 我们就可以谁成功了 (因为题目保证两者中只有一个能成功)
所以只需要将a数组中的所有数相加再加上x和k 判断总和的奇偶性 如果是偶数则为成功
(k的奇偶性如果是n与a数组中的数求和后的奇偶性那么将该和再加上k其奇偶性一定为偶)
代码
#include#include #include #define ll long long using namespace std; const int maxn = 1e5 + 10; ll a[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, t; cin >> t; ll x, k, sum = 0; while(t--){ cin >> n >> x >> k; for(int i = 1; i <= n; i++){ cin >> a[i]; sum += a[i]; } if((sum + x + k) % 2 == 0) cout << "Alice\n"; else cout << "Bob\n"; } return 0; }
1634C - OKEA
题意
t组数据 每组数据 给定n和k 然后就有含数1~n*k的数组
将该数组中的数字分成n列 每个数字位置自己安排 要求每列数的子序列的数字评价值为整数
如果存在这样的安排输出YES 然后再输出一种安排 否则输出NO 这题又涉及到奇偶性问题
当k等于1时 不论怎么排都是符合条件的
当k>1时 因为有两个相邻的数的奇偶性不同那么就是不符合条件的 那么就要做到每列奇偶性都一样
如果n为奇数 就算n*k为偶数 也必定存在一列有奇数有偶数 (奇数多出来你单独一列 而n*k为偶数那么数列中奇数偶数数量相等那么这都出来的一列必定既含有奇数又含有偶数)
而如果n为偶数 那么一定符合 :sum=i?(r?l+1)+n(l?1)+n(r?1)2?(r?l+1)= =i?(r?l+1)+n2?(l+r?2)?(r?l+1)= (r?l+1)?(i+n/2?(l+r?2))
sum一定能被(r?l+1) 整除
#include
#include
#include
#define ll long long
using namespace std;
int main() { ios::sync_with_stdio(false); cin.tie(0); int t, n, k; cin >> t; while (t--){ cin >> n >> k; if(k == 1) { cout << "YES\n"; for(int i = 1; i <= n * k; i++){ cout << i << "\n"; } } else{ if(n % 2 == 1) cout << "NO\n"; else { cout << "YES\n"; for(int i = 1; i <= n; i++){ for(int j = 0; j <= k - 1; j++){ if(j == 0) cout << i + j * n; else cout << " " << i + j * n; } cout << "\n"; } } } } return 0; }
这是我打的第一场cf 发现别人都好强分分钟过三道
只能说我的水平还太低 还需努力吧