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

2025河北秦皇岛CCPC补题

打的团队赛但是却只过了签到题,可以说非常的垃圾了,跟之前差的不是一点。但是这次比赛我也有些感悟。虽然打的很垃圾但是比赛的时候好像没之前那么紧张。关于做题方面我这次最大的感悟就是不要嫌麻烦就不去写!很多思路都是写着写着慢慢优化的。比如模拟那道题,我总感觉有更优的方法去解决,想到了双端队列但是在反转那一块一开始没有想的非常清楚,感觉操作比较麻烦不好实现,后面队友用数组实在模拟不出来了让我试试双端队列我却都不想试。实际上如果试一试是可以想到反转正确的操作。还有就是01S字符串那一道题,其实到后面那个规律我看出来了,但是感觉非常的牵强,实现起来非常的麻烦,总觉得有更巧的规律,最后连试都没试。其实有这个毛病也是有原因的,之前确实有的时候明显模拟非常的难写,可能是规律题,这么干尝到了甜头。但是这次也让我尝到了苦头,一时间想不出来什么好办法就先把眼前的尝试一下!还有就是要转换对大赛题的看法,并不是大部分都是思维题,算法依然重要!比如说这次双端队列的操作其实并不是特别的熟悉,还有就是位运算的方法根本没有一点头绪。这次跟之前打得落差很大,希望后面几天能进步吧~

H、What is all you need ?

题目链接: Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces


签到题,没什么好说的,直接粘代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define fi first
#define se second
#define pii pair<int, int>
const int N = 1e6+1;
int a[N];
int b[N];
deque<pii> q; // 编号和牌数
int n, m;
int f = 1; // 正向
string s,s1; // 普通(C),禁止(S),反转(R),罚抽(D)void solve() {cin >> s1;for(int i=0; i<s1.size(); i++){if(isalpha(s1[i])) s+=tolower(s[i]);}for(int i=0; i<s.size(); i++){if(s[i]=='i'&&s.substr(i)=="isallyouneed"){cout << "Yes" << endl;cout << s.substr(0,i)<<endl;return ;}}cout << "No" << endl;
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while(t--) solve();return 0;
}

J.Generate 01 String

题目链接:Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces

代码中有详细的注释,搭配代码食用

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define fi first
#define se second
#define pii pair<int, int>
const int N = 2e2+1;
int n,m;
string s;
int a,b,c;
int x,y,z;
void solve()
{cin >> s;if(s.size()%2==1||count(s.begin(),s.end(),'0')!=count(s.begin(),s.end(),'1'))//由于数字是01成对增加,所以01个数一定一样且总数一定是偶数{cout << -1 << endl;return ;}int x=0,y=0,t=1;vector<pii> v;for(int i=0; i<s.size(); i++)//11100100{if(s[i]=='1'){if(y==0)//如果此时没有多余的0配对{v.push_back({t,2});//由于此时为1,是拍下的情况x++;//多余1的个数增加}else//如果有0配对{y--;//多余的0就会减少t++;//就会多一个S没用到}}else{if(x==0)//与上面相同{v.push_back({t,1});y++;}else{x--;t++;}}}cout << v.size() << endl;for(auto i:v) cout << i.fi << ' ' << i.se << endl;
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;
//	cin >> t;while(t--) solve();return 0;
}

K.UNO!

题目链接:Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces

题中要求玩家循环进行出牌,此时我们就很容易想到约瑟夫问题,用队列进行模拟,达到循环的效果。但是题中说了还有可能进行反转,但是队列的循环方向相对比较单一,所以双端队列就是一个很不错的选择!虽然本体看起来比较麻烦,但是用对了方法实现起来思路还是非常的清晰的。同样代码有比较详细的注释。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int, int>
#define fi first
#define se second
const int N = 1e6+1;
int a[N];
int b[N];
deque<pii> q;//牌数和编号
int n,m;
int f=1;//正向
string s;//普通(C),禁止(S),反转(R),罚抽(D)
void solve()
{cin >> n >> m;for(int i=1; i<=n; i++){cin >> a[i];q.push_back({a[i],i});}cin >> s;for(int i=0; i<s.size(); i++){if(f==1)//此时为顺时针{pii t=q.front();q.pop_front();t.fi--;//将此时打出来的这张牌减去if(s[i]=='S'){if(t.fi)q.push_back(t);q.push_back(q.front());q.pop_front();//直接抛去,表示禁止}if(s[i]=='R'){f=-1;//方向反转if(t.fi)q.push_front(t);//如果还有牌就下一个}if(s[i]=='D'){if(t.fi)q.push_back(t);pii t=q.front();q.pop_front();q.push_back({t.fi+2,t.se});//让下家加两张牌并跳过}if(s[i]=='C')if(t.fi) q.push_back(t);//直接跳过}else//与顺时针一样,改为对队尾操作{pii t=q.back();q.pop_back();t.fi--;if(s[i]=='S'){if(t.fi)q.push_front(t);q.push_front(q.back());q.pop_back();}if(s[i]=='R'){f=1;if(t.fi)q.push_back(t);}if(s[i]=='D'){if(t.fi)q.push_front(t);pii t=q.back();q.pop_back();q.push_front({t.fi+2,t.se});}if(s[i]=='C'){if(t.fi) q.push_front(t);}}}
/*
3 6
3 2 3
SRDCCD
*/while(q.size())//将队列里的元素拿出来,不在队里的都是0{if(q.front().fi>=0)b[q.front().se]=q.front().fi;q.pop_front();}for(int i=1; i<=n; i++) cout << b[i] << endl;
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;
//	cin >> t;while(t--) solve();return 0;
}

M、

题目链接:Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces

本题就暴露了自己的知识缺陷,根本就没想到位运算的方法。今天虽然比赛打得很烂但是确实是长知识了

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define fi first
#define se second
#define pii pair<int, int>
const int N = 2e2+1;
int n,m;
string s[N];
int a,b,c;
int x,y,z;
void solve()
{cin >> n >> m;for(int i=1; i<=m; i++) cin >> s[i];cin >> a >> b >> c;cin >> x >> y >> z;for(int i=1; i<=(1<<n)-1; i++){bitset<20> bt(i);if(bt.count()>=10&&bt.count()<=13)//确保选10~13道题{vector<int> v;v.push_back((int)2e18);//后面要降序排序,此时加一个非常大的数可以确保从下标从1开始for(int j=1; j<=m; j++){bitset<20> c(s[j]);//将01字符串转成位运算形式c&=bt;v.push_back(c.count());}sort(v.begin(),v.end(),greater<int>());if(v[a]==x&&v[b]==y&&v[c]==z)//金银铜线过题数匹配{cout << bt.count() << endl;
//				cout << bt;for(int j=n-1; j>=0; j--)if(bt[j]) cout << n-j <<' ';
//				for(int j=1; j<=n; j++)
//					if(bt[n-j]) cout << j << ' ';return ;}}}cout << -1 << endl;return ;
}
/*
13 3
1111111111111
1111111111110
1111111110000
1 2 3
12 11 8
*/
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/9148.html

相关文章:

  • I/O外设管理(第七章)
  • 本周 edu教育邮箱注册可行方案
  • Python函数异常处理底层实现原理
  • 机器学习-朴素贝叶斯分类
  • Partial Overwrite绕过PIE保护-[HNCTF 2022 WEEK2]ret2text
  • 将docker数据目录迁移到 home目录下
  • 军事大模型及其应用分析
  • 电脑清理重复文件秒扫 + 相似媒体去重 找出空文件夹 / 损坏文件 批量清理
  • 从比分滚动到数据革命:体育数据如何重构我们的观赛体验?
  • 【运维】Zerotier删除节点后的恢复操作指南
  • ASP.NET Core OData 实践——Lesson2增删改查Entity和EntitySet(C#)
  • 三大数据库【字符串连接】与【数据类型转换】对比:Oracle vs MySQL vs SQL Server
  • H310昂达等主板无法开机自启的原因
  • AI时代新词-数字孪生(Digital Twin)
  • 【C++ STL string :深入浅出 从入门到实战】
  • Android设计模式学习总结目录
  • PyTorch入门教程:下载、安装、配置、参数简介、DataLoader(数据迭代器)参数解析与用法合集
  • 能说一下JVM的内存区域吗
  • [De1CTF 2019]SSRF Me
  • OpenSSL 签名格式全攻略:深入解析与应用要点
  • Node.js全局函数详解:定时器与即时回调
  • SCADA|KingSCADA信创4.0-Win10安装过程
  • 全能邮箱全能邮箱:实现邮件管理的自动化!
  • 5月26日复盘-自注意力机制
  • NSSCTF-[安洵杯 2018]boooooom
  • BugKu Web之get
  • Linux之软件包管理器(CentOS系统) —— yum
  • 虚拟机配置桥接,远程工具直接访问
  • Vue3监听对象数组属性变化方法
  • 认知无线电系统中采用能量检测频谱感知