2021-10-25

                                                        2021csp-j游记

星期五晚上看了一下博客 看到有些人说在代码后面要加

fclose(stdin);fclose(stdout);

不管是不是真的先加上吧

 

星期六考了csp-j,我考得不怎么理想。

8:30开考  看了一下题的大概 觉得A题最简单 就先做A题

 8:40 第一题做完了,用的是暴力枚举

#include<bits/stdc++.h>
using namespace std;
int n,l,r;
int ans=0;
int main(){
	freopen("candy.in","r",stdin);
	freopen("candy.out","w",stdout);
	scanf("%d%d%d",&n,&l,&r);
	for(int k=l;k<=r;k++){
		ans=max(ans,k%n);
	}
	cout<<ans<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}

 但是看了一下数据10的9次方,应该要爆,所以改了一下,优化了不少

#include<bits/stdc++.h>
using namespace std;
long long n,l,r,ans;
int main() {
	//freopen("candy.in","r",stdin);
	//freopen("candy.out","w",stdout);
	scanf("%lld%lld%lld",&n,&l,&r);
	if(r-n<n) {
		printf("%lld",r-n);
		return 0;
	}
	ans=l/n*n;
	ans=r-ans;
	if(ans>=n) {
		printf("%lld",n-1);
	} else {
		printf("%lld",ans);
	}
	return 0;

}

但是这个代码在自己造的有个数据过不去,又改了一下,

#include<bits/stdc++.h>
using namespace std;
long long n,l,r,ans;
int main() {
	//freopen("candy.in","r",stdin);
	//freopen("candy.out","w",stdout);
	scanf("%lld%lld%lld",&n,&l,&r);
	
	ans=l/n*n;
	ans=r-ans;
	if(ans>=n) {
		printf("%lld",n-1);
	} else {
		printf("%lld",ans);
	}
	return 0;
}

 这下觉得行了,这时8:55 开始看下题

第一眼看到B题觉得有点难于是直接跳过B题,直接看C题

第一眼看C题感觉有点像搜索

于是就有了下面这个代码

#include<bits/stdc++.h>
using namespace std;
int n,k,l,ans=1,w=-1,ans3,ans2;
string s,s2,a[10005],b[10005];
void dfs(int n) {
	if(s2[n]=='.'||s2[n]==':') {
		if(ans<=3) {
			if(ans==1||ans==2) {
				w=0;
				ans=1;
				dfs(n+1);

			}
			if(ans==3) {
				if((s2[n-1]-'0'+(s2[n-2]-'0')*10+(s2[n-3]-'0')*100)<=255) {
					w=0;
					ans=1;
					dfs(n+1);

				} else {
					w=1;
					return ;
				}
			}
		} else {
			w=1;
			return ;
		}
		
	}
	if(s2[n]==':'){
		ans3++;
	}
	if(s2[n]=='.'){
		ans2++;
	}
	if(ans2>3||ans3>1){
		w=1;
		return ;
	}
	else if(n==s2.length()-1) {
		ans+=2;
		if(ans<=5) {
			if(ans==1||ans==2||ans==3||ans==4) {
				w=0;
				return ;
			} else if(ans==5) {
				if((s2[n]-'0'+(s2[n-1]-'0')*10+(s2[n-2]-'0')*100+(s2[n-3]-'0')*1000+(s2[n-4]-'0')*10000)<=65535&&s2[n-5]==':') {
					w=0;
					return ;
				} else {
					w=1;
					return ;
				}
			}
		}
	} else {
		ans++;
		dfs(n+1);
	}
}

int main() {
	//freopen("network.in","r",stdin);
	//freopen("network.out","w",stdout);
	cin>>n;
	for(int i=1; i<=n; i++) {

		cin>>s;
		cin>>s2;
		a[i]=s2;
		b[i]=s[0];
		if(s[0]=='S') {
			ans=1;
			w=-1,k=0,ans2=0,ans3=0,ans=0;
			dfs(0);
			if(w==0) {
				for(int j=1; j<i; j++) {
					if(b[j]=="S"&&a[j]==s2) {
						k=1;
						cout<<"FATL"<<endl;
					}
				}
				if(k==0) {
					cout<<"OK"<<endl;
				}

			} else {
				cout<<"ERR"<<endl;
			}
		}
		if(s[0]=='C') {
			if(k!=0) {
				cout<<"ERR";
			} else {
				int p=0;
				for(int j=1; j<i; j++) {
					if(a[j]==s2&&b[j]=="S") {
						cout<<j<<endl;
						p=1;
						break;
					}
				}
				if(p==0){
					cout<<"ERR";
				}
			}
		}

	}
}

由于中间调了一下代码,所以导致 做完已经11:00了,额、然后就去看了D题 发现他需要删除

但是没想到用队列 就打了个暴力 但是连样例都没过,不管了,先看一下其他的,一直检查到11:50

去看了一下B题,发现可以暴力拿部分分,但是来不及了,考试下来打了一个拿了50分 后悔。

总的来说并没有考好 还是子、自己代码能力太弱 没有认真思考 

总分只有120多分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值