0520欢乐赛?!

作者分享了首次参加线下编程比赛的经历,提到在比赛中解出的A题和未能解答的B、C、D、E、F题。文章提供了A、B、C三道题目的解题思路,包括字符串处理、整数判断和递归算法的应用,并反思了因紧张导致的解题失误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次打线下欢乐赛!机房的电脑还是很好用的,不卡。有点紧张,赛时只A了A题,B、C没码,D、E、F没看,22名,160分(……)

A:方块消消乐

具体题目指路 :NKOJ p5919

唯一一个A的题,感动,思路很简单,用string字符串做,是0就cnt++,是1就ans++,最后比较个数,ans = min(ans,cnt)*2;解决。直接判断个数就行,不要想复杂。

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


string n;
int ans=0,cnt=0;
int main(){
	cin>>n;
	int a = n.length();
	for(int i = 0;i <= a;i ++){
	    if(n[i] == '1') cnt ++;
	    if(n[i] == '0') ans ++;
	}
	ans = min(ans,cnt);
	cout<<ans*2;//……想复杂了,可以直接判断个数!! 
	return 0;
}

B:相同的整数

具体题目指路 : NKOJ p8147

还是比较easy的,考试的时候只想到了特判,没有想到普遍情况,WA 40。

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

int a,b,c;
int main(){
     cin>>a>>b>>c;
     int n = max(a,max(b,c));
	 int ax = 3*n-a-b-c;
	 
	 if(ax%2 == 1) cout<<ax/2+2;
	 else cout<<ax/2;
	 
	 return 0;
}

C 数列+1

具体题目指路 :NKOJ p5234

这个题和上面的有丝丝相似……

赛后看了旁边大佬的思路,用了递归判断,悟了……代码不算很长……

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

int n;
int a[20005];
int ans = 0;
int cmp(int x[],int n){
	if(x[n+1] == 0) return n+1;
	else return cmp(x,n+1);
}
int main(){
	cin>>n;
	for(int i = 1;i <= n;i ++) {
		int x;
		cin>>x;
		a[x+10000] ++;
	}
	for(int i = 0;i <= 20000;i ++){
		if(a[i]>1){
			for(int j = 1;;j ++){
				int m = cmp(a,i);
				ans += m-i;
				a[m] ++;
				a[i] --;
				if(a[i] == 1) break;
			}
		}
	}
	cout<<ans;
	return 0;
}

D:涂颜色

具体题目指路 :NKOJ p5236

!!这个的思路也是炒鸡简单,赛时想复杂了(其实是因为紧张没有看懂题意)

先sort,只需要判断最多的一堆与最少的差是否大于k,大于返回NO,小于等于返回YES

A掉它!!

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

int n,k,t;
int main(){
	cin>>t;
	for(int i = 1;i <= t;i ++){
		cin>>n>>k;
		int a[108];
		for(int h = 1;h <= n;h ++) cin>>a[h];
		sort(a+1,a+n+1);
		if(a[n]-a[1] <= k) 
		   cout<<"YES"<<endl;
		else	
		   cout<<"NO"<<endl;
	}
	return 0;//:)考试的时候根本没有看懂题目……
	//现在想来就是有点紧张!!所以没有认真想解法 
}

还有EF ,实在是我不擅长的部分……图论几何……(?)

等老师讲完我来复盘,讲过的题必须A掉!!

                                                                                                                         2023.5.21

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值