首页 > 技术文章 > Good Bye 2019

SwiftAC 2019-12-30 09:40 原文

A.Card Game

题目大意:两个人都有共有n张卡牌,每张卡牌上都有一个数xi,没有两张牌上的数相同,且xi不小于1不大于n。每次两个人选出一张牌来,牌上数字大的人赢得此局,如果谁最后手上拥有所有的n张牌,那么他取得胜利。

分析:只要判断数字为n的牌在谁的手里即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t,n,k1,k2,x;
    cin>>t;
    while(t--){
        cin>>n>>k1>>k2;
        int f = 0;
        for(int i=0;i<k1;i++){
            cin>>x;
            if(x==n) f=1;
        }
        for(int i=0;i<k2;i++){
            cin>>x;
            if(x==n) f=2;
        }
        if(f==1) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

B.Interesting Subarray

题目大意:问你是否能找到一个连续子序列,使得这段子序列里最大值减最小值大于等于这段子序列的长度。

分析:只用比较相邻的两个数即可。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+7;
int a[maxn];
int main() {
    int t, n;
    cin >> t;
    while (t--) {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        bool f = false;
        int l = -1, r = -1;
        for (int i = 1; i <= n - 1; i++) {
            if (abs(a[i] - a[i + 1]) >= 2) {
                f = true;
                l = i;
                r = i + 1;
            }
        }
        if (f) {
            cout << "YES" << endl;
            cout << l << " " << r << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    return 0;
}

C. Make Good

题目大意:让你再找几个ai,使得a1+a2+...+an=2*(a1^a2^...^an)。

分析:就直接构造一个最简单的方法出来就行了,因为添加的元素个数没有限制到最少。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
typedef long long ll;
ll a[maxn];
int main() {
    int t, n;
    cin >> t;
    while (t--) {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        ll l = a[1], r = a[1];
        for (int i = 2; i <= n; i++) {
            l += a[i];
            r ^= a[i];
        }
        //l+x/2 = 2*(r^x)   2*l+x=4*(r^x)
        //1/2*l+x/4 = r^x
        cout << 2 << endl;
        cout << r << " " << l + r << endl;
    }
    return 0;
}

推荐阅读