目录
A. Subtraction Game
题目分析:
B. Permutations & Primes
题目分析:
C. Particles
题目分析:
D. Row Major
题目分析:
给两个数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)<
给定一个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"<
一堆数,可以抽离两数之间的数使得两数加和,通过模拟可知,如果两数相隔球的数量为奇数,那么二球可以合并,否则不行,那么问题其实就化简为了求 奇数位数的和 还有 偶数位数的和,取二者最大值,负数对于最终答案的贡献是负的,所以忽略负数。
#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)<
要求输出一个长度为n的字符串,根据字符串的长度,可以分成其两个因数组成的矩形,例如n为6的时候有这几种情况:
对于奇数,那么其只能构成横排或者竖排,只需要相邻两个字符不重复即可。
对于偶数,我们需要找到字符串长度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<