2025吉林CCPC 题解(前六题)

cpp 复制代码
// Problem: J - Odd-Even Game
// Contest: Virtual Judge - sdccpc20250527
// URL: https://vjudge.net/contest/719585#problem/J
// Memory Limit: 1024 MB
// Time Limit: 1000 ms
//       签到题
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define PII pair<int,int>
#define fi first
#define se second



void solve()
{
	int a,b;
	cin>>a>>b;
	if((a&1)==0) swap(a,b);
	if(a>b) cout<<1<<endl;
	else cout<<2<<endl;
}

signed main()
{
	IOS
	int T=1;
//	cin>>T;
	while(T--) solve(); 
	return 0;
} 
cpp 复制代码
// Problem: C - SSPPSPSP
// Contest: Virtual Judge - sdccpc20250527
// URL: https://vjudge.net/contest/719585#problem/C
// Memory Limit: 1024 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define PII pair<int,int>
#define fi first
#define se second
const int mod = 998244353;
const int N = 15;
int a[N];

int power(int a,int b)//快速幂函数
{
	int ans=1;
	while(b)
	{
		if(b&1)
		{
			ans*=a;
			ans%=mod;
		}
		a*=a;
		a%=mod;
		b>>=1;
	}
	return ans%mod;
}

void solve()
{
	int ans=0;
	int sums=0,sump=1;
	int n,k; cin>>n>>k;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		sums+=a[i]; sums%=mod;//sums中存放从a[0]到a[n-1]的和
		sump*=a[i]; sump%=mod;//sump中存放从a[0]到a[n-1]的积
	}
	string s; cin>>s;
	if(s[s.size()-1]=='p')//先确定开始的ans
	ans = sump;
	else
	ans = sums;
	for(int i=s.size()-2;i>=0;i--)
	{
		if(s[i]=='p')//如果是累乘操作 就相当于乘了n次sump
		{
			ans = power(ans,n);
			ans%=mod;
		}
		else//如果是累加操作就相当于是进行了n次累加操作
		{
			ans*=n;
			ans%=mod;
		}
	}
	cout<<ans%mod<<endl;
}
/*
	问题剖析:
	注意看公式的角标 -> (x1+x2+x3) mod n 换句话说 角标会每次都从第一个数到最后一个数
	当内层循环 x1 x2都为0 这时候x3不断增加 角标实际上就是遍历了一遍数组
	所以只需要逆向判断当前操作是加还是乘即可
	如果是加法就是把当前的ans累加了n次
	如果是乘法就是把当前的ans累乘了n次
	正常模拟即可
*/
signed main()
{
	IOS
	int T=1;
//	cin>>T;
	while(T--) solve(); 
	return 0;
} 
cpp 复制代码
// Problem: D - Coprime
// Contest: Virtual Judge - sdccpc20250527
// URL: https://vjudge.net/contest/719585#problem/D
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define PII pair<int,int>
#define fi first
#define se second

//const int mod = 998244353;

void solve()
{
	int x,y;
	cin>>x>>y;
	for(int i=x+1;i<y;i++)
	{
		if(__gcd(i,x)==1&&__gcd(i,y)==1)
		{
			cout<<i<<endl;
			return ;
		}
	}
	cout<<-1<<endl;
}

signed main()
{
	IOS
	int T=1;
	cin>>T;
	while(T--) solve(); 
	return 0;
} 
cpp 复制代码
// Problem: F - Ever Forever
// Contest: Virtual Judge - sdccpc20250527
// URL: https://vjudge.net/contest/719585#problem/F
// Memory Limit: 1024 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define PII pair<int,int>
#define fi first
#define se second

//const int mod = 998244353;

void solve()
{
	vector<int> a;
	int ans=0;
	int n; cin>>n;
	string s;cin>>s;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='e')
		{
			a.push_back(i);
		}
		else
		{
			for(auto it : a)
			{
				ans += (i-it);
			}
		}
	}
	cout<<ans<<endl;
}

signed main()
{
	IOS
	int T=1;
//	cin>>T;
	while(T--) solve(); 
	return 0;
} 
cpp 复制代码
// Problem: G - Rock-Paper-Scissors
// Contest: Virtual Judge - sdccpc20250527
// URL: https://vjudge.net/contest/719585#problem/G
// Memory Limit: 1024 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define PII pair<int,int>
#define fi first
#define se second
vector<int> v(4),a(4),vv(4),aa(4);

void solve()
{
	int n;cin>>n;
	cin>>v[1]>>v[2]>>v[3]>>a[1]>>a[2]>>a[3];
	vv=v,aa=a;
	int mx=0;
	//假设下标 1 2 3 分别为石头剪刀布 计算mx就需要让小V尽可能的赢 首先计算小V出石头能赢的局数
	int x = min(v[1],a[2]);
	v[1]-=x;a[2]-=x;
	mx+=x;
	//小V出剪刀能赢的局数
	x = min(v[2],a[3]);
	v[2]-=x;a[3]-=x;
	mx+=x;
	//小V出布能赢的局数
	x = min(v[3],a[1]);
	v[3]-=x;a[1]-=x;
	mx+=x;
	//如果小V的石头还有剩余 那么就贪心一点 先计算能平局的局数 
	if(v[1])
	{
		x = min(v[1],a[1]);
		v[1]-=x;a[1]-=x;
		if(v[1])//如果小V还有剩余的石头说明已经把小A的剪刀和石头都消耗完了 那么就没办法了 再贪心也只能输了就统计输的局数
		{
			int xx=min(v[1],a[3]);
			mx-=xx;v[1]-=xx;a[3]-=xx;
		}
	}
	//如果小V的剪刀还有剩余 那么就贪心一点 先计算能平局的局数 
	if(v[2])
	{
		x = min(v[2],a[2]);
		v[2]-=x;a[2]-=x;
		if(v[2])//如果小V还有剩余的剪刀说明已经把小A的布和石头都消耗完了 那么就没办法了 再贪心也只能输了就统计输的局数
		{
			int xx=min(v[2],a[1]);
			mx-=xx;v[2]-=xx;a[1]-=xx;
		}
	}
	//如果小V的布还有剩余 那么就还贪心一点 先计算能平局的局数 
	if(v[3])
	{
		x = min(v[3],a[3]);
		v[3]-=x;a[3]-=x;
		if(v[3])//如果小V还有剩余的布说明已经把小A的布和石头都消耗完了 那么就没办法了 再贪心也只能输了就统计输的局数
		{
			int xx=min(v[3],a[2]);
			mx-=xx;v[3]-=xx;a[2]-=xx;
		}
	}
	cout<<mx<<' ';
	int mi=0;
	x = min(aa[1],vv[2]);
	aa[1]-=x;vv[2]-=x;
	mi+=x;
	//同上面计算一样 要计算最小值 就要让小A尽可能的赢 即让小V尽可能的输 只需要把前文中的代码复制过来 a改为vv v改为aa即可
	x = min(aa[2],vv[3]);
	aa[2]-=x;vv[3]-=x;
	mi+=x;
	//同上
	x = min(aa[3],vv[1]);
	aa[3]-=x;vv[1]-=x;
	mi+=x;
	//同上
	if(aa[1])
	{
		x = min(aa[1],vv[1]);
		aa[1]-=x;vv[1]-=x;
		if(aa[1])//同上
		{
			int xx=min(aa[1],vv[3]);
			mi-=xx;aa[1]-=xx;vv[3]-=xx;
		}
	}
	//同上
	if(aa[2])
	{
		x = min(aa[2],vv[2]);
		aa[2]-=x;vv[2]-=x;
		if(aa[2])//同上
		{
			int xx=min(aa[2],vv[1]);
			mi-=xx;aa[2]-=xx;vv[1]-=xx;
		}
	}
	//同上
	if(aa[3])
	{
		x = min(aa[3],vv[3]);
		aa[3]-=x;vv[3]-=x;
		if(aa[3])//同上
		{
			int xx=min(aa[3],vv[2]);
			mi-=xx;aa[3]-=xx;vv[2]-=xx;
		}
	}
	cout<<-mi<<endl;
}

signed main()
{
	IOS
	int T=1;
	cin>>T;
	while(T--) solve(); 
	return 0;
} 
cpp 复制代码
// Problem: L - Good Matrix
// Contest: Virtual Judge - sdccpc20250527
// URL: https://vjudge.net/contest/719585#problem/L
// Memory Limit: 1024 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define PII pair<int,int>
#define fi first
#define se second
const int mod =  998244353;
int power(int a,int b)//快速幂函数
{
	int ans=1;
	while(b)
	{
		if(b&1)
		{
			ans*=a;
			ans%=mod;
		}
		a*=a;
		a%=mod;
		b>>=1;
	}
	return ans%mod;
}

void solve()
{
	int x,y;
	cin>>x>>y;
	int ans=0;
	if(x%2==0||y%2==0)
	{
		if(x&1)
		{
			ans=y-1;
		}
		if(y&1)
		{
			ans=x-1;
		}
	}
	else if(x&1&&y&1)
	{
		ans = x+y-2;
	}
	else
	ans=0;
	cout<<power(2,ans)<<endl;
}

signed main()
{
	IOS
	int T=1;
	cin>>T;
	while(T--) solve(); 
	return 0;
} 
相关推荐
smile是对你的礼貌~@济南大学1 年前
部分树上问题及图的联通性(图论学习总结部分内容)
python·算法·图论·icpc·ccpc
smile是对你的礼貌~@济南大学1 年前
网络流初步(图论学习总结部分内容)
python·算法·图论·icpc·ccpc
smile是对你的礼貌~@济南大学1 年前
最短路(图论学习总结部分内容)
python·算法·图论·icpc·ccpc
鱼香rose__1 年前
The 17-th BIT Campus Programming Contest C.小L的旅行
算法·ccpc
smile是对你的礼貌~@济南大学1 年前
图论学习总结
python·算法·图论·icpc·ccpc