2020CSP-S游记

本文作者分享了参加2020 CSP-S比赛的经历,从报名到初赛、复习、做题、考后分析等过程。在初赛中遇到的题目包括模拟、二进制操作、线段树和DP问题。通过自我分析和讨论,作者对错误进行了总结,并对接下来的准备提出了反思和计划。
摘要由CSDN通过智能技术生成

报名

一如既往…本来报了J和S,但是hhwdd不让报J,说太基础了,所以就只报了S,交了50块钱。(说句实话,50块钱确实有点贵了吧…)

初赛

前几天在学校复习,看学校计算机社出的初赛知识点简介,10号打了16-18年的三套提高初赛题,做完了分给同学看,顺便找学长讲讲题。
11号上午考S,还是在死过无数次的地方——首师附考的,没提前交卷,考完之后跟同学去吃了饭,然后回家写作业。
大概是14还是15号的样子,提前出分了,81,还不错。

复习

主要就是hhwdd课上的考试,然后就是学长讲题、同学讲题、我讲题,总之就是考试+讲题。复习大概就是复赛可能要考的数据结构和算法,比如线段树、队列、01背包、搜索之类的。我自己从开学以来就在慢慢出题,在10月20日左右出了12道题,一道模拟,俩字符串,俩模板题(SPFA和01背包),仨提高组原题(2018D1T1、2017D1T2,2014D2T1),还有从loj.ac上抓的题,内容比较全面。
考前几天就是看书、理解代码、背代码。
学校要求12:00回班自习(11.12期中考试),然后我就天天报个电脑,带着书去学校,中午别人写作业/背单词,我敲代码…
回家也是复习、打游戏之类的,导致我作业基本上没时间写。6号LT要查数学作业,我无奈,只好占用了历史课的时间。。
7号上午数学加课,我课间溜了,点了个外卖。当我吃完外卖回到班里时,LT还没下课——又铁托了。于是乎我又拿起了我的信息进阶教程,在门外看。
中午照例和同学们打游戏,然后利用本校学生的身份在考场们外面转悠,被老师赶到楼下去了。

做题

进了考场,就在座位上坐着,等着老师把密码写出来。往年都是renzhensikao之类的,这次居然是(ke2UI0gong2UY0),咱也不知道啥意思,咱也不敢问。
打开problem.pdf,粗略看了一眼,第一题模拟,第二题二进制?模拟?,第三题线段树,第四题DP还是贪心,也没多想。
第一题要讨论的东西太多,脑子不大好使,写了1.5h才过大样例。
第二题就直接转二进制,然后按位或,取2的幂再减n就行了。大概写了0.5h,过大样例。
第三题一看就是线段树,用一个栈把type=3的函数处理一下就行了。但是题目好像没说type=3的函数调用的是之前的函数,不得已开了个数组记录。前前后后调了1.8h,过大样例。
就剩12分钟写第4题,也来不及了,就写了个只关注下一回合的贪心,尝试骗分(虽然可能性不大)。

考后

出考场,估计280-300吧,我还挺高兴的。
结果呢,一到信奥题库上自测,第一题40WA???,第二题60WA???,第三题75TLE/MLE(后来发现信奥题库的时限是1s),第四题0.
今天早上洛谷四道题都出数据了,我又交了一遍。
第一题还是40WA,对照一下数据范围,大概就是1582年之后的都错了。
第二题65WA+TLE,清了输入缓存之后是65WA,不知道为啥。
第三题只有30?MLE了。
第四题0,不用想,我开始是这么想的,但是后来还是在洛谷上交了一遍,5分。

我的代码

第一题

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
//#define mytest
using namespace std;
long long Q,r,year,month,day;
long long mon(long long&,long long);
int main(){
   
	#ifndef mytest
		freopen("julian.in","r",stdin);
		freopen("julian.out","w",stdout);
	#endif
	cin>>Q;
	while ( Q-- ){
   
		year=-4713;
		month=day=1;
		cin>>r;
		if ( r<=2299160 ){
   
			year+=4*(r/1461);
			r%=1461;
			if ( r>=366 ){
   
				r-=366;
				year++;
				year+=r/365;
				r%=365;
			}
			if ( year>=0 )
				year++;
			month+=mon(r,year);
			day+=r;
			cout<<day<<' '<<month<<' ';
			if ( year<0 )
				cout<<-year<<" BC"<<endl;
			else
				cout<<year<<endl;
			continue;
		}
		r-=2298884;
		year=1582;
		if ( r<=354 ){
   
			r-=276;
			month=10;
			day=14;
			if ( r>=18 ){
   
				r-=18;
				day=1;
				month++;
			}
			if ( r>=30 ){
   
				r-=30;
				month++;
			}
			day+=r;
			cout<<day<<' '<<month<<' '<<year<<endl;
			continue;
		}
		r-=355;
		year++;
		year+=400*(r/146097);
		r%=146097;
		if ( r<365 ){
   
			month+=mon(r,year);
			day+=r;
			cout<<day<<' '<<month<<' '<<year<<endl;
			continue;
		}
		year++;
		r-=365;
		if ( r<42369 ){
   
			year+=4*(r/1461);
			r%=1461;
			if ( r>=366 ){
   
				r-=366;
				year++;
				year+=r/365;
				r%=365;
			}
			month+=mon(r,year);
			day+=r;
			cout<<day
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值