当前位置: 首页 > web >正文

2025吉林长春CCPC

这个题简单题中等题偏多,对大一蒟蒻比较友好。本次比赛暴露出的问题就是模拟题写少了,一想到模拟的方法就不会把它当作最优解,实现能力也有欠缺

好了,接下来开始补题~

Problem C. 和和和和和和 积积积积积积 和和和 积积积和和和积
这个题看着非常的复杂,其实就一个加和乘的操作。
从内层到外层一步步查,S就加n次,P就乘n次。加的操作可以直接✖️n,减少时间复杂度。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[15];
const int mod=998244353;
signed main()
{int n,k;cin>>n>>k;int sum=0;int sum1=1;for(int i=0;i<n;i++){cin>>a[i];sum+=a[i];sum%=mod;sum1*=a[i];sum1%=mod;}string s;cin>>s;int ans=0;if(s[s.size()-1]=='s')sum=sum%mod;elsesum=sum1%mod;for(int i=s.size()-2;i>=0;i--){if(s[i]=='s'){int ans=sum%mod;sum*=n;sum%=mod;}else{int ans=sum%mod;for(int i=0;i<n-1;i++){sum*=ans;sum%=mod;}}}cout<<sum%mod<<endl;return 0;
}
Problem D. 互互互 质质质
题目链接: Problem - D - Codeforces
这个题就没什么好说的,从左边界直接便利到右边界就行了。不可能会存在找了很久都没找到复合条件的导致超时。要么就是两个数离得很近,没有符合条件的,不然在有限的长度内一定能找到符合条件的数。
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
const int N = 1e5+1;
int a[N];
string s,s1;
vector<int> v;
int ans;
int n;
int x,y,z; 
bool check(int n)
{if(__gcd(x,n)==1&&__gcd(y,n)==1)return 1;return 0;
}
void solve()
{cin >> x >> y; for(int i=x+1; i<=y-1; i++){if(check(i)){cout << i << endl;return ;}}cout << -1 << endl;
}
/*
3
1 3
115 125
2184 2200
*/
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin >> t;while(t--) solve();return 0; 
}

F、Ever Forever

题目链接:codeforces.com/gym/105922/problem/F

这个题也非常的好懂,就是将所有的ef串的距离相加(顺序敏感)。由于f可以和前面所有的e进行配对,所以当遇到e的时候可以将它的下标用vector存起来,方便之后相加。遇到f的时候遍历vector将此时f前面所有e之间的距离相加。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
const int N = 1e5+1;
int a[N];
string s,s1;
vector<int> v;
int ans;
int n;
void solve()
{cin >> n;cin >> s;for(int i=0; i<n; i++){if(s[i]=='e'){v.push_back(i);}if(s[i]=='f'){for(auto j:v) ans+=i-j;}}cout << ans;
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;
//	cin >> t;while(t--) solve();return 0; 
}
Problem G. 剪刀
题目链接: Problem - G - Codeforces
题意比较简单,就是两个人玩石头剪刀布,两个人的总牌数一样,小V赢一局就+1分,否则就-1分。输出分数最大和最小的情况。
要想赢的局数足够多就要尽量让石头-剪刀,布-石头,剪刀-布。如果有剩余的话就尽量出相同的,保证不会变负分。按照这样的大原则,参考具体牌的数量关系算出最多和最少的分数。
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
const int N = 1e5+1;
int a[N];
string s,s1;
vector<int> v;
int ans;
int n;
int x,y,z;
void solve()
{int n,a1,b1,c1,a2,b2,c2,ans=0,res=0;cin>>n>>a1>>b1>>c1>>a2>>b2>>c2;int x1=a1,y1=b1,z1=c1,x2=a2,y2=b2,z2=c2;if(a1<b2){b2-=a1;ans+=a1;a1=0;}else{a1-=b2;ans+=b2;b2=0;if(a1>=a2){a1-=a2;a2=0;}else{a2-=a1;a1=0;}c2-=a1;ans-=a1;a1=0;}if(b1<c2){c2-=b1;ans+=b1;b1=0;}else{b1-=c2;ans+=c2;c2=0;if(b1>=b2){b1-=b2;b2=0;}else{b2-=b1;b1=0;}a2-=b1;ans-=b1;b1=0;}if(c1<a2){a2-=c1;ans+=c1;c1=0;}else{c1-=a2;ans+=a2;a2=0;if(c1>=c2){c1-=c2;c2=0;}else{c2-=c1;c1=0;}b2-=c1;ans-=c1;c1=0;}cout<<ans<<" ";if(x1<z2){z2-=x1;res+=x1;x1=0;}else{x1-=z2;res+=z2;z2=0;if(x1>=x2){x1-=x2;x2=0;}else{x2-=x1;x1=0;}y2-=x1;res-=x1;x1=0;}if(y1<x2){x2-=y1;res+=y1;y1=0;}else{y1-=x2;res+=x2;x2=0;if(y1>=y2){y1-=y2;y2=0;}else{y2-=y1;y1=0;}z2-=y1;res-=y1;y1=0;}if(z1<y2){y2-=z1;res+=z1;z1=0;}else{z1-=y2;res+=y2;y2=0;if(z1>=z2){z1-=z2;z2=0;}else{z2-=z1;z1=0;}x2-=z1;res-=z1;z1=0;}cout<<-1*res<<endl;
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--) solve();return 0;
}
Problem J.
题目链接: Problem - J - Codeforces
签到题,不说了
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
const int N = 1e5+1;
int a[N];
string s,s1;
void solve()
{int n,m;cin>>n>>m;if(n%2==0){if(n>m)cout<<2<<endl;elsecout<<1<<endl;}else{if(n>m)cout<<1<<endl;elsecout<<2<<endl;}
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;
//	cin >> t;while(t--) solve();return 0; 
}

Problem L.好矩阵

题目链接:Problem - L - Codeforces

题意就是计算有多少个m✖️n的01矩阵使得对于矩阵中的每一个元素,它所在的行和列的异或和等于它本身。

这个题如果数据量大的话就非常的不好验证,主要是找规律。根据题目的阳历可以发现当相加为偶数的时候就是2^(n+m)-2。最后一个打表可以发现他是n^455,结合前面的额2 5 是2^1次方可以得出如果两个数相加是奇数的话就是2^(num-1),其中num是偶数方。题中没有给出来的是当两个数都是偶数的时候只有一种情况。最后求次方的时候需要用到快速幂。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
#define mod 998244353
const int N = 1e5+1;
int a[N];
string s;
vector<int> v;
int ans;
int n,m;
int x,y,z;
int r1,s1,p1,r2,s2,p2;
int cnt;
int num;
int qpow(int b)
{int a=2;int k=1;while(b){if(b%2==1)k=k*a%mod;a=a*a%mod;b/=2;}return k;
}
void solve()
{cin >> n >> m;if((n+m)%2==0){if(n%2==0){cout << 1 << endl;return ;}else{num=n+m-2;}}else{if(n%2==0)num=n-1;else num=m-1;}cout << qpow(num) << endl;
}
/*
3
3 1 1 1 1 1 1
1 0 1 0 0 0 1
0 0 0 0 0 0 0
*/
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin >> t;while(t--) solve();return 0;
}

好了,本次的补题就到这了~

http://www.xdnf.cn/news/9408.html

相关文章:

  • C++STL之deque
  • 文件类型汇总
  • 机动与灵活的水上救援利器,冲锋舟
  • 深度解析 CC 攻击:原理、危害与防御策略​
  • C++将地址转换为字符串
  • 双特异性抗体的设计与开发
  • Java SapringBoot集成Redis存储Session,setAttribute会重置过期时间吗?怎么实现更新过期时间
  • Soft thinking和MixtureofInputs——大模型隐空间推理——本周论文速读
  • apk- 反编译apktools操作方法——请勿乱用-东方仙盟
  • Opigno LMS 3.2.7 安装操作记录
  • 32通道采集收发平台18G带宽直采
  • lcd-framebuffer驱动开发参考文章
  • 更新时间相差8个小时
  • Word 目录自动换行后错位与页码对齐问题解决教程
  • 某验4无感探针-js逆向
  • fabric 是一个开源框架,用于使用 AI 增强人类能力。它提供了一个模块化框架,用于使用一组可在任何地方使用的众包人工智能提示来解决特定问题
  • 仿真环境中机器人抓取与操作——感知与抓取
  • 通过实例来讲解MySQL锁机制
  • 智能的结构化觉醒:GraphRAG引领AI进入关系世界
  • JDK21深度解密 Day 6:ZGC与内存管理进化
  • Flink Table API 编程入门实践
  • 使用子查询在 SQL Server 中进行数据操作
  • 触觉智能RK3506星闪开发板规格书 型号IDO-EVB3506-V1
  • 如何在sublime text中批量为每一行开头或者结尾添加删除指定内容
  • 计算机系统结构-第4章-数据级并行
  • 五大要素协同效益的量化模型与实战策略
  • 企业宣传网站系统项目
  • Unity3D仿星露谷物语开发54之退出菜单及创建可执行文件
  • 视频监控联网系统GB28181协议中历史视音频的回放流程详解以及查询失败常见原因
  • Python PyMySQL