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

2025吉林ccpc【部分题解】

文章目录

  • C - SSPPSPSP
  • ProblemD.互互互质质质
  • ProblemF. Ever Forever
  • ProblemG.石石石头头头剪剪剪刀刀刀布布布
  • Problem J.奇偶游戏
  • Problem L.好矩阵

C - SSPPSPSP

题目来源:C - SSPPSPSP
在这里插入图片描述

在这里插入图片描述
!](https://i-blog.csdnimg.cn/direct/26fc1492b1724446be61cf39b718cf9b.png)
在这里插入图片描述
解题思路
题目很长但读懂题意就很简单,是一个根据字符顺序不断累加或累乘的过程。可以先算出一开始的加和以及乘积之和,然后从后往前依次累算。如果是s就累加加和,如果是p就累乘乘积之和。记得每次都要取模。

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int mod=998244353;
int n,k,a[20];
string s;
void solve()
{cin>>n>>k;int s1=0,s2=1,sum,ans;for(int i=1;i<=n;i++){cin>>a[i];s1=(s1+a[i])%mod;//算出初始的和 s2=(s2*a[i])%mod;// 积 }cin>>s;if(s[s.size()-1]=='s')//从后往前算,先将第一个值赋值在sum上 sum=s1%mod;elsesum=s2%mod;for(int i=s.size()-2;i>=0;i--)//依次遍历 {if(s[i]=='s')//如果是加和可以直接乘n sum=(sum*n)%mod;else//乘积之积 {ans=sum%mod;for(int i=0;i<n-1;i++)sum=(sum*ans)%mod;}}cout<<sum%mod;
}
signed main()
{IOS;int _=1;
//	cin>>_;while(_--)solve(); return 0;
}

ProblemD.互互互质质质

题目来源:ProblemD.互互互质质质

在这里插入图片描述
解题思路
虽然x,y的范围很大,但依然可以遍历x,y之间的数来找符合条件的z,因为质数出现的次数还是很频繁的,质数一定分别和他们两个互质,因此它们要么就是相差很小没有互质的数,要么就一定在没超限的条件下能找到和他们都互质的数。
代码实现

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
void solve()
{int x,y;cin>>x>>y;for(int i=x+1;i<y;i++){if(__gcd(x,i)==1&&__gcd(i,y)==1){cout<<i<<endl;return ;}}cout<<-1<<endl;
}
signed main()
{IOS;int _=1;cin>>_;while(_--)solve(); return 0;
}

ProblemF. Ever Forever

题目来源:ProblemF. Ever Forever
在这里插入图片描述
解题思路
签到题,题目范围很小,不用想太复杂,直接遍历,每遇到一个e就遍历从当前位置到最后的每个f的位置,将其每个距离加起来即可。
代码实现

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int N=1e5+5;
void solve()
{int n,ans=0;cin>>n;string s;cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='e'){for(int j=i+1;j<n;j++){if(s[j]=='f')ans+=(j-i);}}}cout<<ans;
}
signed main()
{IOS;int _=1;
//	cin>>_;while(_--)solve(); return 0;
}

ProblemG.石石石头头头剪剪剪刀刀刀布布布

题目来源:ProblemG.石头剪刀布
在这里插入图片描述
解题思路
又臭又烂的模拟题,我没有优化的方法,就是纯模拟,先模拟最大值,让石头1找剪刀2,如果有剩余再找石头2,如果还有剩余就只能找布2,最小值相反。

#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.奇偶游戏

题目来源:ProblemJ.奇奇奇偶偶偶游游游戏戏戏
在这里插入图片描述
解题思路
超级无敌签到题,先找出二者最大值,再判断奇偶,如果是奇数输出1,否则输出0;
代码实现

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int N=1e5+5;
void solve()
{int a,b;cin>>a>>b;int mx=max(a,b);if(mx%2==1)cout<<1;elsecout<<2;
}
signed main()
{IOS;int _=1;
//	cin>>_;while(_--)solve(); return 0;
}

Problem L.好矩阵

题目来源:ProblemL.好好好矩矩矩阵阵阵
在这里插入图片描述
解题思路
找规律的一道题,题目意思是,矩阵的每行每列的异或和等于他本身,这样的01矩阵有多少个。通过给的样例就不难看出,如果两个数一奇一偶,输出2的奇数减1次幂,如果两个都是奇数则输出 2 的 二者之和减2 次幂,记得用快速幂取模!.
代码实现

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int mod= 998244353;
int Qmi(int a,int b)
{int ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
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;cout<<Qmi(2,ans)<<endl;
}
signed main()
{IOS;int _=1;cin>>_;while(_--)solve(); return 0;
}
完结撒花~
http://www.xdnf.cn/news/688411.html

相关文章:

  • c++第三天(对象与构造函数)
  • ICDMC 2025:创新媒体模式,迎接数字时代的挑战
  • Redission学习专栏(一):快速入门及核心API实践
  • CORS跨域资源共享解析
  • 算法刷题记录:滑动窗口经典题目解析
  • 【大模型原理与技术-毛玉仁】第三章 Prompt工程
  • web-css
  • 20250528-C#知识:函数简介及函数重载
  • 外部访问可视化监控 Grafana (Windows版本)
  • 扇形 圆形 面积公式
  • 如何在WordPress中选择最佳Elementor主题:专家指南
  • 前端大文件上传-断点续传
  • 影刀RPA-17- 列表练习
  • 使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker(Ubuntu 服务器)
  • 如果是在服务器的tty2终端怎么查看登陆服务器的IP呢
  • 《vue.js快速入门》链接摘抄整理
  • 深入理解SQLMesh中的Lookback、Forward-Only和Auto-Restatement特性
  • 【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角
  • Redis keydb dragonfly skytable
  • 《全面解析鸿蒙相关概念:鸿蒙、开源鸿蒙、鸿蒙 Next 有何区别》
  • 【R语言编程绘图-调色】
  • css3 新增属性/滤镜效果/裁剪元素/图片适应盒子/定义和使用变量/恢复默认initial
  • 使用electron创建应用程序的基础步骤
  • 基于 HEC-RAS 与 ArcGIS 的洪水危险性评估技术— 从地形分析到淹没模拟的全流程实践
  • webpack的安装及其后序部分
  • 【ArcGIS Pro微课1000例】0071:将无人机照片生成航线、轨迹点、坐标高程、方位角
  • 从技术到实践:ArcGIS 与 HEC-RAS 解析洪水危险性及风险评估
  • v1.05 支付宝 绑定时写Nand flash卡死问题
  • 致远OA与用友U8集成实现制造业设备追溯全过程方案分析
  • Java jdk8版本特性(未完成版)