报名
一如既往…本来报了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