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

2025河北CCPC 题解(部分)

签到题:AC代码如下 :

// Problem: H - What is all you need?
// Contest: Virtual Judge - sdccpc20250526
// URL: https://vjudge.net/contest/718568#problem/H
// 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);
//const int mod = 998244353;void solve()
{string s; cin>>s;string t = s.substr(s.size()-12,12);if(t == "isallyouneed"){cout<<"Yes"<<endl;string ans = s.substr(0,s.size()-12);cout<<ans<<endl;}else{cout<<"No"<<endl;}
}signed main()
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

// Problem: K - UNO!
// Contest: Virtual Judge - sdccpc20250526
// URL: https://vjudge.net/contest/718568#problem/K
// 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 N = 1e6+10;
int a[N];
int res[N];void solve()
{bool f=1;deque<pii> q;int n,m; cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];q.push_back({a[i],i});}string s; cin>>s;for(int i=0;i<s.size();i++){if(f)//当前为正向(顺时针){if(s[i]=='C')//没有特殊操作 当前玩家出牌之后排到后面即可{if(q.front().fi==1) q.pop_front();//如果当前玩家只有一张牌了 直接出队即可else//否则就排到后面 并且牌数-1{int x = q.front().fi-1;int y = q.front().se;q.pop_front();q.push_back({x,y});}}else if(s[i]=='S')//禁止效果 牌{if(q.front().fi==1) q.pop_front();//同上else{int x = q.front().fi-1;//同上int y = q.front().se;q.pop_front();q.push_back({x,y});}int x = q.front().fi;//禁止的效果 -> 当前玩家出牌后下一个玩家直接跳过 -> 直接往后排int y = q.front().se;q.pop_front();q.push_back({x,y});}else if(s[i]=='R')//顺序反转效果 牌{f=0;//顺序改变if(q.front().fi==1) q.pop_front();//同上else{q.front().fi--;//不用往后排了,因为顺序已经反转了 下一次就要从逆时针开始转了 只需要将牌数-1即可}//他在队首的话就相当于是在逆时针方向时的队尾}else{if(q.front().fi==1) q.pop_front();//同上else{int x = q.front().fi-1;int y = q.front().se;q.pop_front();q.push_back({x,y});}int x = q.front().fi+2;//加两张牌效果int y = q.front().se;q.pop_front();q.push_back({x,y});//排到队尾}}else//逆时针方向{	//之后代码根上面的顺时针方向基本一样 只需要把队首和队尾进行调换即可 -> back->front :front->backif(s[i]=='C'){if(q.back().fi==1) q.pop_back();else{int x = q.back().fi-1;int y = q.back().se;q.pop_back();q.push_front({x,y});}}else if(s[i]=='S'){if(q.back().fi==1) q.pop_back();else{int x = q.back().fi-1;int y = q.back().se;q.pop_back();q.push_front({x,y});}int x = q.back().fi;int y = q.back().se;q.pop_back();q.push_front({x,y});}else if(s[i]=='R'){f=1;//改为顺时针方向if(q.back().fi==1) q.pop_back();else{q.back().fi--;}}else{if(q.back().fi==1) q.pop_back();else{int x = q.back().fi-1;int y = q.back().se;q.pop_back();q.push_front({x,y});}int x = q.back().fi+2;int y = q.back().se;q.pop_back();q.push_front({x,y});}}}while(q.size())//最后将所有的人的牌数依次存放到res数组中即可{res[q.front().se]=q.front().fi;//一一对应(second代表下标->第几个人 first代表当前所剩余的牌数)不在队列中的就说明是这个人在之前就已经出完牌了 在res数组中就是0 直接输出即可q.pop_front();}for(int i=1;i<=n;i++){cout<<res[i]<<endl;}return ;
}signed main()
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

 

// Problem: M - 第九届河北省大学生程序设计竞赛
// Contest: Virtual Judge - sdccpc20250526
// URL: https://vjudge.net/contest/718568#problem/M
// 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);
const int N = 1e3;
string s[N];
int ra,rb,rc;
int pa,pb,pc;void solve()
{int n,m;cin>>n>>m;for(int i=1;i<=m;i++){cin>>s[i];}cin>>ra>>rb>>rc;cin>>pa>>pb>>pc;for(int i=1;i<=(1<<n)-1;i++)//在二进制中,2^n的二进制表示正好是n + 1位数 {							//因为2^n在二进制中是1后面跟n个0,所以当2^n用二进制表示时,其位数为n + 1。bitset<20> bt(i);//将i转成二进制  if(bt.count()>=10&&bt.count()<=13)//适当剪枝  {vector<int> ans;ans.push_back(1e18);//维护下标 使得下标从1开始  for(int j=1;j<=m;j++){bitset<20> c(s[j]);//将01串复制到 bitset中  c&=bt;//且运算操作 能够找出两个二进制数中的共同的1的个数ans.push_back(c.count());}sort(ans.begin(),ans.end(),greater<int>());if(ans[ra]==pa&&ans[rb]==pb&&ans[rc]==pc)//满足题目要求 当前位次的过题数符合题意{cout<<bt.count()<<endl;//输出一样的个数for(int j=n-1;j>=0;j--){if(bt[j])cout<<n-j<<' ';}return ;}}}cout<<-1<<endl;return ;
}signed main()
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

 

// Problem: J - Generate 01 String
// Contest: Virtual Judge - sdccpc20250526
// URL: https://vjudge.net/contest/718568#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 secondvoid solve()
{vector<pii> a;string s; cin>>s;int num0=0,num1=0;for(int i=0;i<s.size();i++){if(s[i]=='0') num0++;if(s[i]=='1') num1++;}if(num0!=num1){cout<<"-1"<<endl;return ;}int x=0,y=0,index=1;		//x中存还能补贴几个0(目前有多少个因为操作2而多余的0)//y中存还能补贴几个1(目前有多少个因为操作1而多余的1)for(int i=0;i<s.size();i++){if(s[i]=='0'){if(x==0) //如果没有能补贴的0就只能通过操作1来构造出0 使用操作1之后就会多余出来一个1供以后出现的1使用{a.push_back({index,1});//将这时候的操作记录下来y++;//由于使用了操作1 -> 所以会多出来一个1(即y++即可)}else{x--;//否则的话就是用操作2剩余的0来和这个位置所需的0来构造成一组 01/10串index++;//这一组构造完成后就不用管了,因为现在只需要考虑一定能构成要求串的情况}//其他的01/10串组可以在之后进行配对 让index++就行了}else{if(y==0){a.push_back({index,2});x++;}			else{y--;index++;}}}cout<<a.size()<<endl;for(auto i : a){cout<<i.fi<<' '<<i.se<<endl;}
}
/*00S1S10S1S  001101每次的操作(不管是操作1还是操作2),本质上都是S的个数++ 对数字而言 无非就是在01/10串之后添加一个10/01串所以可以把一个01/10串看作为一组 每次去构造每个组就行了 构造完成一组之后就让index++ 去构造下一组
*/
signed main()
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

 其实正解是二分~

附:

相关文章:

  • 人工智能如何协助老师做课题
  • A-9 OpenCasCade读取STEP文件中的NURBS曲面
  • MySQL日志文件有哪些?
  • PDF电子发票数据提取至Excel
  • AI时代新词-人工智能伦理审查(AI Ethics Review)
  • cannot access ‘/etc/mysql/debian.cnf‘: No such file or directory
  • Vue 核心技术与实战day04
  • LitCTF2025 WEB
  • 项目管理进阶:详解项目管理办公室(PMO)实用手册【附全文阅读】
  • Windows环境下Redis的安装使用与报错解决
  • CMake指令:set()
  • 深度思考、弹性实施,业务流程自动化的实践指南
  • 【Dify系列教程重置精品版】第十章:Dify与RAG
  • 2025密云马拉松复盘
  • 通用表格识别接口-表格版面还原-表格文字提取-Java接口集成
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP
  • transformer总结
  • 开发规范-Restful风格、Apifox安装与使用
  • 探秘谷歌Gemini:开启人工智能新纪元
  • 在linux中安装minio
  • php网站开发技术前景/178软文网
  • 临沂网站建设培训学校/杭州推广公司排名
  • 广州17做网站/佛山优化推广
  • 管理咨询网站建设/郑州网站制作公司哪家好
  • 网站建设和优化排名/学网络与新媒体后悔死了
  • 学习做网站只学过c/360优化大师安卓手机版下载安装