Codeforces Round 945 (Div. 2) A~E

A. Chess For Three (思维)

题意:

三个人在一起下棋。每盘棋都有两个人对弈。胜者得 2 2 2 分,负者得 0 0 0 分,如果和棋,双方各得 1 1 1 分。请注意,同一对棋手可能下过任何次数的非负数(可能为零)。也有可能根本没有下过棋。下完所有棋局后,他们的得分分别是 p 1 p_1 p1 p 2 p_2 p2 p 3 p_3 p3 。此外,可以保证 p 1 ≤ p 2 ≤ p 3 p_1 \leq p_2 \leq p_3 p1p2p3 成立。
找出可能发生的最大和棋次数,如果无解则输出 − 1 -1 1

分析:

三个人每局对总分数的贡献都是偶数,所以最后分数总和一定是偶数。如果 a + b ≥ c a+b \ge c a+bc,那么可以找到一种方法平局 ( a + b + c ) / 2 (a+b+c)/2 (a+b+c)/2次。否则最多平局 a + b a+b a+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 (位运算)

题意:

a a a 的孤度定义为:对于任意两个正整数 i i i j j j ( 1 ≤ i , j ≤ n − k + 1 1 \leq i, j \leq n - k +1 1i,jnk+1 ),以下条件成立的最小正整数 k k k ( 1 ≤ k ≤ n 1 \le k \le n 1kn ):

a i ∣ a i + 1 ∣ … ∣ a i + k − 1 = a j ∣ a j + 1 ∣ … ∣ a j + k − 1 , a_i | a_{i+1} | \ldots | a_{i+k-1} = a_j | a_{j+1} | \ldots | a_{j+k-1}, aiai+1ai+k1=ajaj+1aj+k1,

即对于连续的 k k k个元素,它们的位相 O R OR OR 应该是相同的。求数组 a a a的孤度

分析:

我们分别对于每一位进行考虑,满足条件 k k k的最小值,为最长连续的 0 0 0的长度加 1 1 1,如果没有 1 1 1,那么这个值是可以任意取的,最后对所有的值取最大值即可。

代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
   
    int t;
    cin >> t;
    while (t--) {
   
        int n;
        cin 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值