Good Bye 2023

Problem - A - Codeforces

#include
#define endl '\n'
#define int long long
using namespace std;
const int N=110;
int b[N];
int n,k;
void solve() {
	cin>>n>>k;
	int x=1;
	for(int i=1;i<=n;i++) cin>>b[i],x*=b[i];
	if(2023%x){
		cout<<"No"<ans;
	while(x%7==0){
		ans.push_back(7);
		x/=7;
	}
	while(x%17==0){
		ans.push_back(17);
		x/=17;
	}
	int len=ans.size();
	if(len<=k){
		cout<<"Yes"<q;
		for(int i=0;ik){
			int x=q.front();
			q.pop();
			int y=q.front();
			q.pop();
			q.push(x*y);
		}
		cout<<"Yes"<>t;
	while(t--) {
		solve();
	}
	return 0;
}

 Problem - B - Codeforces

#include
#define endl '\n'
#define int long long
using namespace std;
int gcd(int a,int b){
	if(b==0) return a;
	return gcd(b,a%b);
}
int a,b;
void solve() {
	cin>>a>>b;
	int d=a*b/gcd(a,b);//最小公倍数
	if(d>b) cout<>t;
	while(t--) {
		solve();
	}
	return 0;
}

Problem - C - Codeforces 

大小为n的数组
双方博弈

玛莎先下

操作:在数组中任意选择两个数ai和aj删除,然后添加一个(ai+aj)/2*2

直到剩下最后一个数,游戏结束

玛莎目标使最后一个数最大化,奥里亚目标最小化

任意选择,说明与顺序无关,先升序
如果选择两个数的和为偶数,那么不增,如果和为奇数,那么减1
所以就看奇偶的个数,预处理前缀奇数个数以及前缀和
要想奇数,必须是奇+偶数,这样操作一次是减1,但是这样就少了一个奇数了

奇 奇 奇  3------减1
奇 奇 奇 奇 4------减2
奇 奇 奇 奇 奇 5---减1
奇 奇 奇 奇 奇 奇 6----减2
奇 奇 奇 奇 奇 奇 奇 7----减3
奇 奇 奇 奇 奇 奇 奇 奇 8-----减2
奇 奇 奇 奇 奇 奇 奇 奇 奇 9----减3
奇 奇 奇 奇 奇 奇 奇 奇 奇 奇 10-----减4

#include
#define endl '\n'
#define int long long
using namespace std;
const int N=1e5+10;
int a[N];
int n;
void solve() {
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	int ji=0,sum=0;
	sum+=a[1];
	sum+=a[2];
	if(a[1]%2) ji++;
	if(a[2]%2) ji++;
	cout<1){
		if(sum%2==1) cout<>t;
	while(t--) {
		solve();
	}
	return 0;
}

你可能感兴趣的:(codeforces,算法,c++)