本文主要是介绍Codeforces Round 884 (Div. 1 + Div. 2)(A~D),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
A. Subtraction Game
题目分析:
B. Permutations & Primes
题目分析:
C. Particles
题目分析:
D. Row Major
题目分析:
A. Subtraction Game
题目分析:
给两个数a,b,每次都必须取其中的一个,谁没东西可取谁输,取求后手必胜策略, 直接输出a+b即可,因为无论先手拿a和b当中的哪一个,后手会拿走另一个,后手必胜。
#include<bits/stdc++.h>
#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<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
using namespace std;
typedef pair<int,int>pii;
signed main()
{IOS
use{int a,b;cin>>a>>b;cout<<(a+b)<<endl;
}
return 0;
}
B. Permutations & Primes
题目分析:
给定一个n个数的数组,即从1~n,问如何排列该数组,使MEX能得到素数的子序列最多,MEX为序列当中未出现的最小正整数,如果某个序列不包含1,那么这个序列就是无用序列,因为1并不是素数,所以1应该放在中间,使得能取到1的子序列尽可能的多,对于第二和第三小的数,也就是2和3,它们本身是素数,所以应该放到数组的两侧,使得能取到他俩的子序列尽可能的少。这样可以得到最优解
#include<bits/stdc++.h>
#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<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
using namespace std;
typedef pair<int,int>pii;
signed main()
{IOS
use{int n;cin>>n;if(n==2)cout<<"1 2"<<endl;else if(n==1)cout<<"1"<<endl;else if(n==3)cout<<"3 1 2"<<endl;else if(n==4)cout<<"3 4 1 2"<<endl;else{n-=3;cout<<"2 ";int start=3;for(int i=1;i<=n;i++){cout<<start+i<<" ";if(i==n/2) cout<<"1 ";}cout<<"3"<<endl;}
}
return 0;
}
C. Particles
题目分析:
一堆数,可以抽离两数之间的数使得两数加和,通过模拟可知,如果两数相隔球的数量为奇数,那么二球可以合并,否则不行,那么问题其实就化简为了求 奇数位数的和 还有 偶数位数的和,取二者最大值,负数对于最终答案的贡献是负的,所以忽略负数。
#include<bits/stdc++.h>
#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<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
using namespace std;
typedef pair<int,int>pii;
signed main()
{IOS
use{int n;cin>>n;vct<int>a(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)<<endl;}else cout<<mins<<endl;
}
return 0;
}
D. Row Major
题目分析:
要求输出一个长度为n的字符串,根据字符串的长度,可以分成其两个因数组成的矩形,例如n为6的时候有这几种情况:
对于奇数,那么其只能构成横排或者竖排,只需要相邻两个字符不重复即可。
对于偶数,我们需要找到字符串长度n的非因数,因为矩形的长宽均由因数组成,所以只要确保由非因数长度的字符组成的字符串内部不重复,就可以保证满足条件,而题目又说使得整个字符串当中不同字符的个数尽可能的少,所以只要找出最小的那个非因数即可。
如果出现最小的非因数大于26怎么办?这样不就导致字符串重复了?需要明白的是,如果最小非因数大于26,说明这个数至少是26!(403291461126605635584000000),故一定不会出现重复情况.
#include<bits/stdc++.h>
#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<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
using namespace std;
typedef pair<int,int>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<<endl;}else {int x=2;for(;x;x++){if(n%x!=0)break;}for(int i=1;i<=n;i++){cout<<(char)(i%x+'a');}cout<<endl;}
}
return 0;
}
这篇关于Codeforces Round 884 (Div. 1 + Div. 2)(A~D)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!