A. Chess For Three (思维)
题意:
三个人在一起下棋。每盘棋都有两个人对弈。胜者得 222 分,负者得 000 分,如果和棋,双方各得 111 分。请注意,同一对棋手可能下过任何次数的非负数(可能为零)。也有可能根本没有下过棋。下完所有棋局后,他们的得分分别是 p1p_1p1 、 p2p_2p2 和 p3p_3p3 。此外,可以保证 p1≤p2≤p3p_1 \leq p_2 \leq p_3p1≤p2≤p3 成立。
找出可能发生的最大和棋次数,如果无解则输出 −1-1−1 。
分析:
三个人每局对总分数的贡献都是偶数,所以最后分数总和一定是偶数。如果a+b≥ca+b \ge ca+b≥c,那么可以找到一种方法平局(a+b+c)/2(a+b+c)/2(a+b+c)/2次。否则最多平局a+ba+ba+b次。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int a, b, c;
cin >> a >> b >> c;
int s = a + b + c;
if (s % 2)
cout << -1 << endl;
else
cout << min(s / 2, a + b) << endl;
}
return 0;
}
B.Cat, Fox and the Lonely Array (位运算)
题意:
将 aaa 的孤度定义为:对于任意两个正整数 iii 和 jjj ( 1≤i,j≤n−k+11 \leq i, j \leq n - k +11≤i,j≤n−k+1 ),以下条件成立的最小正整数 kkk ( 1≤k≤n1 \le k \le n1≤k≤n ):
ai∣ai+1∣…∣ai+k−1=aj∣aj+1∣…∣aj+k−1, a_i | a_{i+1} | \ldots | a_{i+k-1} = a_j | a_{j+1} | \ldots | a_{j+k-1}, ai∣ai+1∣…∣ai+k−1=aj∣aj+1∣…∣aj+k−1,
即对于连续的kkk个元素,它们的位相 OROROR 应该是相同的。求数组aaa的孤度
分析:
我们分别对于每一位进行考虑,满足条件kkk的最小值,为最长连续的000的长度加111,如果没有111,那么这个值是可以任意取的,最后对所有的值取最大值即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}