cf-goodbye2019

传送门

enmmmm 快速做完了abc题,d题不会,挂机半天又闲得无事又交一次c 直接掉700+名。。。。。以最后一次ac为准 我傻了 我演我自己


A Card Game standard input/output 1 s, 256 MB Submit Add to favourites x8360

  两个人,n张牌 谁有更大的那张牌 一直出就好

B Interesting Subarray standard input/output 2 s, 256 MB Submit Add to favourites x6019

   如存在good 子串 输出任意即可, 所以直接查找是否有 a[i]-a[i-1] >= 2 即可
C Make Good standard input/output 2 s, 256 MB Submit Add to favourites x4722

  需要将 sum == xsum*2, 所以只需要添加两个数  一个是先把 xsum 变成0, 另一个是当前sum, 这样 sum+sum == sum*2
D Strange Device standard input/output 1 s, 256 MB Submit Add to favourites x1784

  交互题, 不太会, 看了下 要用到 cout.flush();  作用是同步缓冲区和输出序列, 如果不用的话会出现 Idleness limit exceeded on test 1 错误,

  我们仅用前 k+1 个元素, 在 k+1 次 查询内找出m。 第 i 次询问除 a[i] 以外的其他数,则在全部 k + 1 个答案中第 m 小的数出现了 k-m+1 次, 第 m+1 小的数出现了 m 次。 因此答案中较大数出现次数就是答案

   每次查询都输出 除 i 的 1 ~ k+1 并且插入一个值, 查询结束后这些值组成一个 k+1的数组  数组最大值的出现次数即为m

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

#define _for(i,a,b) for(int i = (a); i < (b); i++)
#define _rep(i,a,b) for(int i = (a); i <= (b); i++)
#define _per(i,a,b) for(int i = (a); i > (b); i--)
#define ll long long
void taskA(){
    int t; cin >> t;
    while(t--) {
        int n,k1,k2; cin >> n >> k1 >> k2;
        int m1 = 0, m2 = 0;
        _for(i,0,k1) {
            int x;cin >> x;
            m1 = max(m1, x);
        }
        _for(i,0,k2) {
            int x; cin >> x;
            m2 = max(m2, x);
        }
        cout << (m1>m2?"YES
":"NO
");
    }
    return;
}
void taskB(){
    int t; cin >> t;
    while(t--) {
        int n;
        cin >> n;
        vector<int> a(n);
        _for(i,0,n) cin >> a[i];
        int flag = 0, l, r;
        _for(i,1,n) {
            if(abs(a[i]-a[i-1]) >= 2){
                flag = 1;
                l = i, r = i+1;
                break;
            }
        }
        cout << (flag ?"YES
": "NO
");
        if(flag) cout << l << " " << r << "
";
    }
    return;
}
void taskC(){
    int t; cin >> t;
    while(t--) {
        int n; cin >> n;
        vector<int> a(n);
        _for(i,0,n) cin >> a[i];
        ll sum = 0, xsum = 0;
        _for(i,0,n) {
            sum += a[i];
            xsum ^= a[i];
        }
        sum += xsum;
        cout << "2
" << xsum << " " << sum << "
";
    }//输出2, 然后两个数是 xorsum, xorsum+sum
    return;//先添加一个数 让右边为0  再添加sum 这样就 sum+sum = sum*2
}
void taskD(){
    int n,k; cin >> n >> k;
    vector<int> v;
    _rep(i,1,k+1) {
        cout << "?";
        _rep(j,1,k+1) if(j != i) cout << " " << j; 
        cout << "
";
        int pos, val; cin >> pos >> val;
        v.push_back(val);
    }
    sort(v.rbegin(), v.rend());
    int x = v[0], m = 0;
    for(auto it:v) if(x == it) m++;
    cout << "! " << m << "
";
    cout.flush();
    return;
}
int main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    //taskA();
    //taskB();
    //taskC();
    //taskD();
    return 0;
}
原文地址:https://www.cnblogs.com/163467wyj/p/12119426.html