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;
}