Codeforces Round 884 (Div. 1 + Div. 2)(A~D)

目录

A. Subtraction Game

题目分析:

B. Permutations & Primes 

题目分析:

C. Particles

题目分析: 

 D. Row Major

题目分析:


A. Subtraction Game

Codeforces Round 884 (Div. 1 + Div. 2)(A~D)_第1张图片

题目分析:

给两个数a,b,每次都必须取其中的一个,谁没东西可取谁输,取求后手必胜策略, 直接输出a+b即可,因为无论先手拿a和b当中的哪一个,后手会拿走另一个,后手必胜。

#include
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
template bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<pii;
signed main()
{IOS
use{
    int a,b;cin>>a>>b;
    cout<<(a+b)<

B. Permutations & Primes 

Codeforces Round 884 (Div. 1 + Div. 2)(A~D)_第2张图片

题目分析:

给定一个n个数的数组,即从1~n,问如何排列该数组,使MEX能得到素数的子序列最多,MEX为序列当中未出现的最小正整数,如果某个序列不包含1,那么这个序列就是无用序列,因为1并不是素数,所以1应该放在中间,使得能取到1的子序列尽可能的多,对于第二和第三小的数,也就是2和3,它们本身是素数,所以应该放到数组的两侧,使得能取到他俩的子序列尽可能的少。这样可以得到最优解

#include
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
template bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<pii;
signed main()
{IOS
use{
    int n;cin>>n;
    if(n==2)cout<<"1 2"<

C. Particles

Codeforces Round 884 (Div. 1 + Div. 2)(A~D)_第3张图片

题目分析: 

一堆数,可以抽离两数之间的数使得两数加和,通过模拟可知,如果两数相隔球的数量为奇数,那么二球可以合并,否则不行,那么问题其实就化简为了求 奇数位数的和 还有 偶数位数的和取二者最大值,负数对于最终答案的贡献是负的,所以忽略负数。

#include
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
template bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<pii;
signed main()
{IOS
use{
    int n;cin>>n;
    vcta(n+1);
    int mins=-1e9-100;bool st=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>0)st=1;
        mmax(mins,a[i]);
    }
    if(st){
        int ans1=0;
        for(int i=1;i<=n;i+=2){
            if(a[i]>0)ans1+=a[i];
        }
        int ans2=0;
        for(int i=2;i<=n;i+=2){
            if(a[i]>0)ans2+=a[i];
        }
        cout<<1ll*max(ans1,ans2)<

 D. Row Major

Codeforces Round 884 (Div. 1 + Div. 2)(A~D)_第4张图片

题目分析:

要求输出一个长度为n的字符串,根据字符串的长度,可以分成其两个因数组成的矩形,例如n为6的时候有这几种情况:

Codeforces Round 884 (Div. 1 + Div. 2)(A~D)_第5张图片

 对于奇数,那么其只能构成横排或者竖排,只需要相邻两个字符不重复即可。

对于偶数,我们需要找到字符串长度n的非因数,因为矩形的长宽均由因数组成,所以只要确保由非因数长度的字符组成的字符串内部不重复,就可以保证满足条件,而题目又说使得整个字符串当中不同字符的个数尽可能的少,所以只要找出最小的那个非因数即可。

如果出现最小的非因数大于26怎么办?这样不就导致字符串重复了?需要明白的是,如果最小非因数大于26,说明这个数至少是26!(403291461126605635584000000),故一定不会出现重复情况.

#include
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
template bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<pii;
signed main()
{IOS
use{
    int n;cin>>n;
    if(n%2){
        for(int i=1;i<=n;i++){
            if(i%2)cout<<'a';
            else cout<<'b';
        }cout<

 

你可能感兴趣的:(题解,cocoa,macos,objective-c)