2022河南CCPC自我总结(附榜)

弱校弱队,A了四题AEFG,混了省铜(很满意了)(人生第一块XCPC牌子),大佬轻喷

赛前:

实习和准备考研等各种杂七杂八的事情,赛前两三个月基本没看题,最多敲了几道水题。

9.29热身赛,三个小时,总共四道题,学校里其它四只队伍都A了2-3道,我们队热身赛只A了1道题,而且还是在最后五分钟我的两个队友极限想出来的结论,我为队伍贡献了好几发WA...然后大部分上机时间还都被我占用了...能做的两道题被我时间全浪费了啥也没做...靠着队友推出来的思维题才勉强A了一题。总而言之,真的打完热身赛心里很不好受,感觉自己在拖整个队伍后腿。然后第二天yml把我们整个队伍拉出来加训了一整天,重新磨合了一下讨论了一下方案,又找了2021年新疆省赛的CCPC练习了一遍,虽然没做出来几道题吧,但是大概让我找回了一些基本的思维。(很感谢新疆赛的A题,练习的时候没做出来回来晚上找题解又敲了一遍,才把河南赛的E题给写了,不然估计我有思路也敲不出来了)

10.3正式赛

开始的时候差点没进去...OMS的更新卡住了..好不容易更新完,第一次PTA默认第一机位摄像头没开启..重启之后又更新半天..还好赛前最后五分钟进去了,那个时候都做好了换备用机的准备..

A题真的很佩服前面的队伍,一分钟两分钟写出来直接A,老年人手速真的慢,五分钟才AC(写了十个if哈哈哈哈后来看代码别人队伍写的都是for哈哈哈哈活该我写的慢)

A题刚写完,yml把E题的题意跟我讲了下 找s的子串里面有没有满足 5 7 5的,随意删,思考了几分钟,大概把我的思路和yml讲了下,遍历一次然后对每个字母计数,先满足5 再满足7  最后满足5,每次满足完之后清零接着往下遍历。和yml对了一下我的思路没毛病我就开始写了。然后WA了一次,发现清零只清零了先到达5的数组。又让yml测试了几个数据,就交上去AC了。

u1s1,前面的队伍做的真的很快,我们队伍完全就是看哪道题交的人多,通过的多我们就去开哪道题。我们写完E之后发现F和G两题都有人写,通过率也还可以,我让yml和ztf开F去了,我去看了G,一看题目巴拉巴拉区间、与运算、期望、取模,我就觉得这个应该是个线段树+与运算的题目,就想换题目了,但是通过的人真的不少,我对F题目也没什么思路,就强迫自己往下看,读了十多分钟,把题目读懂了,然后yml在那边没有思路,我就把他叫过来跟我讨论讨论,用例子讲完题目之后,他提出了质疑,也就是在这里,我们发现这个东西就是个诈骗题T_T直接统计所有的串与运算之后的1的个数就行..写了之后本地测了没问题..丢上去来了个段错误,弱队刷的题少,真没见过这个提示..看代码我们也没看出来是哪里有问题,(我们队伍都是半路出家,yml和我之前写的都是java,ztf用的python,但是赛前电脑重启了没有python的环境,加上他沉迷于F题)我们换了java写,开始想着赶紧写赶紧交,就用了Scanner..意料之中的TLE....还好本子上还有java的快速输入输出..赶紧换..WA了两次终于A掉了。

接下来就是坐牢时间...队友俩在讨论F题,我去看了看有没有其它题目能写的,发现这个时候H水管交的人很多但是通过率很低,我也去看了两眼,先是想到暴力DFS,但是1e5个case加上1e5的m的大小,我感觉时间会爆,又没有更好的思路,我就暂时放掉了...

还有J题目,看了两遍没看懂.....我好弱...

我感觉没其他题目可以开了就回去和队友一起看F了,队伍都坚信这是个规律结论题,就是找不到哈哈,中间辛酸过程就不提了(因为我这题没咋思考哈哈哈基本全靠队友),他俩好像找规律就写了七八张纸,最后ztf找出来了等差数列啥啥的规律(记不清了..)特判了1,2,4三个数字。

A出来F题之后差不多大概还有一个小时多一点的时间,排名大概在170+。最后只能自己找感觉能做的题目了,我发现I题基本上交的都过了.....我就跟队友说开这题,虽然题干像老奶奶的裹脚布又臭又长(出题团队很好,没有不敬的意思)。读了二十分钟看懂了是个模拟题,弄明白了各个变量的意思,ztf报着他的思路我在那里疯狂码...写了半个小时发现思路全乱了哈哈哈哈,就剩最后十分钟写不出来了,就开始研究排名表了哈哈哈(山东好强)

总结:出题团队很好,弱队也有参与感,真没想到能拿到铜(弱校去年一年没牌子),今年咱学校还有(种子队)拿了个银,感谢yml和ztf

自己写的代码晚点贴。

A

#include <bits/stdc++.h>
using namespace std;


int main(){
	
	int n;
	cin>>n;
	
	if(n==1){
		cout<<"1";
	}else if(n==2){
		cout<<"10";}else if(n==3){
			cout<<"102";
		}else if(n==4){
			cout<<"1023";
		}else if(n==5){
			cout<<"10234";
		}else if(n==6){
			cout<<"102345";
		}	else if(n==7){
			cout<<"1023456";
		}	else if(n==8){
			cout<<"10234567";
		}	else if(n==9){
			cout<<"102345678";
		}else if(n==10){
			cout<<"1023456789";
		}else{
			cout<<"-1";
		}
			
		
	return 0;
}

E

#include <bits/stdc++.h>
using namespace std;

string s;
int dp[26];
int main(){
	int n;cin>>n;
	cin>>s;
	bool sign1=false;bool sign2=false;bool sign3=false;
	string s1,s2,s3;
	char ss1[6]={'0'},ss2[8]={'0'},ss3[6]={'0'};
	int now=0;
	if(s.length()<17){
		cout<<"none";
	}else{
		for(;now<s.length();now++){
				dp[s[now]-'a']++;
				if(dp[s[now]-'a']==5){
					for(int i=0;i<26;i++){
						dp[i]=0;
					}
					sign1=true;
					for(int i=0;i<5;i++){
						ss1[i]=s[now];
					}
					break;
				}
			}
			now++;
			for(;now<s.length();now++){
				dp[s[now]-'a']++;
					if(dp[s[now]-'a']==7){
						for(int i=0;i<26;i++){
								dp[i]=0;
								}
						sign2=true;
						for(int i=0;i<7;i++){
							ss2[i]=s[now];
								}
						break;
					}
			}
			now++;
			for(;now<s.length();now++){
				dp[s[now]-'a']++;
					if(dp[s[now]-'a']==5){
						for(int i=0;i<26;i++){
								dp[i]=0;
								}
						sign3=true;
						for(int i=0;i<5;i++){
							ss3[i]=s[now];
								}
						break;
					}
				}
			s1=ss1;s2=ss2;s3=ss3;
			if(sign1 && sign2 &&sign3){
				cout<<s1<<s2<<s3;
			}else{
				cout<<"none";
			}
		
	}
	
	
	


	return 0;

}

F

#include <bits/stdc++.h>
using namespace std;

int main(){
	
	int n;
	cin>>n;
	if(n==1){
		cout<<"1"<<endl;
		cout<<"1"<<endl;
	}else if(n==2 || n==4){
		cout<<"-1";
	}else{
		int length=(n+1)/2;
		cout<<length<<endl;
		for(int i=1;i<length;i++){
			cout<<i<<" ";
		}
		if(n%2==1){
			cout<<length;
		}else{
			cout<<length+1;
		}
	}
	
	
	return 0;
}

G//下面代码好像是段错误,然后我换java写了一遍过了  逻辑差不多,代码不知道哪里有问题吧

#include <bits/stdc++.h>
using namespace std;
const int maxm=1010;
string s[maxm];

int main(){
	int n,m,q,a,b,l,r,p;
	
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	cin>>q;
	for(int i=1;i<=q;i++){
		cin>>a>>b>>l>>r>>p;
	}

	for(int j=0;j<m;j++){
		s[n+1][j]='1';
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<m;j++){
			s[i+1][j]= s[i][j] & s[i+1][j];
		}
	}
	int count=0;
	for(int j=0;j<m;j++){
		if(s[n+1][j]=='1'){
			count++;
		}
	}
	cout<<count;
	return 0;
}

榜单链接:2022年河南省CCPC大学生程序设计竞赛 | RankLand (algoux.org)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值