zoukankan      html  css  js  c++  java
  • 一铭君一的NOIp2020打铁记

    Day 0

    中午请假从学校出发,依然是自驾到了日照(好像在某个服务区面到了同学?

    晚上去吃了顿火锅,回酒店的路上去街边的一家面包店随便买了点面包准备明天早上糊弄一下早饭

    到酒店打开笔记本想写题,但是打开B站无法自拔,10点多被母后强行要求去睡了

    Day 1

    考前

    早上极不情愿的从床上爬起来,胡乱吃了一口,坐车去考点,到的时候大概只有7:20左右

    考场门口还没什么人,沿着学校和同学一起溜达溜达(给我冻成啥比

    在入口拍了几张照,希望今年RP++吧……

    赛场打铁实况直播

    试机时间!!!

    很早就进了考场了,大概8:00左右吧,我们已经可以碰机器了

    原来规定试机时间20分钟,一下变成了30分钟。

    我挺高兴,拿到Dev-C++之后开始打读入优化和一些板子

    花了5分钟左右配置一下编译命令和缺省源,搞一下选手文件夹(仔细检查防止GG

    然后20分钟狂码一顿LCA,线段树,单调队列(键盘都快让我敲坏了

    正当我感觉状态已经调整好了之后,神奇的事情发生了:老师跟我说我坐错位置了????

    我:?????

    原来考场的考号是贴在机子右上方的,但是桌子上也贴了一排编号,是学校里的机器编号

    然后我按照桌子上的那个桌签来坐,就坐错位置了(关键是我坐的那个位置原来的那个人正好没来,导致我一直没有发现

    换位置就换位置吧,心态调整好,但是……我码的那么多板子啊啊啊啊啊!!!!!

    重新坐下开始打板子,但是时间所剩无几,只打了一个单调队列和一个读入优化和缺省源

    考前2分钟,旁边那个哥们还问我怎么在Windows环境下怎么开无限系统栈空间

    出于好心,我就告诉他在编译环境下用-Wl,--stack=512000000(我真是活雷锋

    如果我不告诉他无线栈命令,他T4模拟30分的大样例不可能过(膨胀

    4.5h考试时间!!!

    打开PDF,先看今年评测机的配置——i7-8700K@3.7GHz,但是运存好像换成了32GB?这说明CCF恰烂钱

    再仔细看一遍选手须知,防止硬核爆零的问题出现,建一个选手文件夹,准备就绪

    T1:waterCCF良心水题???(事实证明这是今年NOIp唯一的一道阳间题目了

    不难想到搜索或者拓扑排序模拟的思路,但是分数一顿乱通分之后很有可能会爆掉int

    所以想到开long long并采取边通分边约分的策略,总体复杂度大概(O(nlogn)),期望得分(100pts)

    开始上手代码,突然发现,欧几里得辗转相除的板子我好像忘掉了……

    想到algorithm库里有一个__gcd()的函数,可以求解最大公约数,但是众所周知,CCF不让使用以__开头的函数等

    于是机智的我点开了algorithm的源码库,找到了__gcd()函数的实现源码,并且照猫画虎的写了一份。

    随便造了几组数据,觉得手写的这个差不多能用,于是继续写广搜模拟

    由于个人代码能力的问题,到9:30左右才过了第一个样例

    然后跑第二个样例的时候,跑出来一个2/111/15(好像是),手玩一下数据,发现有2个入水口

    可以凭空变出11/15吨翔来,我这个程序,十分牛B

    怀疑思路有问题,于是回去重新手玩数据,10分钟后觉得思路好像没问题,应该是代码的锅

    既然是凭空造*,那么应该是某个地方算多了。最后发现,在非汇点广搜下一层时,要清空这个节点的污水记录值

    在大概10:05的时候,过了第二个样例和大样例,觉得没什么问题,扔了去写T2

    T2:快乐字符串直接升天???

    拿到题面之后,其实我是懵逼的,毕竟字符串已经好几年没有考过了

    对着屏幕发呆了10分钟之后,感觉写不出来,先扔了滚去看T3

    T3:神奇构造SPJ双倍快乐???

    拿到题面之后,我又是一顿汪汪队懵大逼。。。毕竟我做过的历年真题里,没有一道是考构造方案还带SPJ的

    感觉水平不够,果断扔了去看T4

    T4:超空间微信步数???

    T4的题目描述属实阴间,而且给人一种很难的感觉,10维空间逗我笑???

    花了10分钟基本弄明白了题目要求干啥之后,转向数据范围看看有没有人口普查分。

    发现题目要求:如果不能走出空间,输出-1,于是先打个printf("-1 ")骗5分再说

    然后看到对于(30\%)的数据,有(nleq 100),感觉这部分可以暴力模拟一下

    一开始,我是想用数组来模拟坐标的,然后感觉因为维数不同不太好模拟,于是改成了递归

    递归的同时需要检查一下是否走出空间范围,边递归边统计步数step得到答案

    于是我写出了如下的代码:

    inline void walk(const int i){
    	if(1<=S[pro[i][0]]+pro[i][1] && S[pro[i][0]]+pro[i][1]<=w[pro[i][0]]){//判断是否在维度内,pro是记录每一步怎么走
    		S[pro[i][0]]+=pro[i][1];//模拟下一次位置
    		ans=(ans+1)%Mod;
    		if(i<n) walk(i+1);//没走出去就重新走
    		else walk(1);
    	}//在维度内
    	else{
    		ans=(ans+1)%Mod;
    		return;
    	}
    }
    

    然后发现一个带问题:需要枚举(n)维内的出发点,但是维数从(1-5)

    但是维数并不确定,需要根据维数开for循环,所以需要设计一个动态for算法

    在一顿乱搞yy之后,我写出了如下的动态开for算法

    inline void GreatFor(const int wei){//带一个参数,开参数层循环
    	for(int i=1;i<=w[1];i++){
    		if(wei==1){
    			S[1]=i;
    			walk(1);
    			continue;
    		}
    		for(int j=1;j<=w[2];j++){
    			if(wei==2){
    				S[1]=i,S[2]=j;
    				walk(1);
    				continue;
    			}			
    			for(int k=1;k<=w[3];k++){
    				if(wei==3){
    					S[1]=i;S[2]=j;S[3]=k;
    					walk(1);
    					continue;
    				}
    				for(int q=1;q<=w[4];q++){
    					if(wei==4){
    						S[1]=i;S[2]=j;S[3]=k;S[4]=q;
    						walk(1);
    						continue;
    					}
    					for(int e=1;e<=w[5];e++){
    						if(wei==5){
    							S[1]=i;S[2]=j;S[3]=k;S[4]=q;S[5]=e;
    							walk(1);
    							continue;
    						}
    						for(int r=1;r<=w[6];r++){
    							if(wei==6){
    								S[1]=i;S[2]=j;S[3]=k;S[4]=q;S[5]=e;S[6]=r;
    								walk(1);
    								continue;
    							}
    							for(int t=1;t<=w[7];t++){
    								if(wei==7){
    									S[1]=i;S[2]=j;S[3]=k;S[4]=q;S[5]=e;S[6]=r;S[7]=t;
    									walk(1);
    									continue;
    								}
    								for(int y=1;y<=w[8];y++){
    									if(wei==8){
    										S[1]=i;S[2]=j;S[3]=k;S[4]=q;S[5]=e;S[6]=r;S[7]=t;S[8]=y;
    										walk(1);
    										continue;
    									}
    									for(int u=1;u<=w[9];u++){
    										if(wei==9){
    											S[1]=i;S[2]=j;S[3]=k;S[4]=q;S[5]=e;S[6]=r;S[7]=t;S[8]=y;S[9]=u;
    											walk(1);
    											continue;
    										}
    										for(int o=1;o<=w[10];o++){
    											S[1]=i;S[2]=j;S[3]=k;S[4]=q;S[5]=e;S[6]=r;S[7]=t;S[8]=y;S[9]=u;S[10]=o;
    											walk(1);
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    

    然后循环快乐枚举模拟,(25)分到手(我没判-1

    考后

    回到车上一边回济南,一边恰了点KFC,然后和SXY电竞了两个小时(正好到家

    晚上学了一晚上文化课(此时我以为我T1 AC,T4 30pts 暴力+输出 -1 的 5pts=135pts省一稳了)

    还挺高兴的哈?????

    Day N

    成绩

    其实具体是12.8号,当时洛谷测成绩120(90+30)T1爆了在下的ll卡了10分不过感觉问题不大

    然后发下来官方数据成绩:60+25=85pts,人直接傻掉

    T1 开unsigned long long才能拿90pts,正解高精

    T4 -1出在了前(30\%)的数据里,但是我没判,递归爆栈MLE了,拿了25pts

    离开

    好多人都要退役了,有高二和高三的学长,也有几个高一的同学

    其实我连续两次打铁,本来也就心灰意冷了,感觉自己没什么天赋

    “要不,我也退役吧……”,12.8晚上我对我的好哥们说

    “哎呀你退啥役啊,这部还有一年的机会么?”然后一顿给我鼓励

    感觉好一点了,晚上睡得挺香的,“算啦,还是坚持下来吧!”

    机房里走了好多人,已经没有备考时那么热闹非凡了,感觉好冷清啊……

    明年加油吧!

  • 相关阅读:
    javascript form表单常用的正则表达式
    jquery判断邮箱对错
    利用js实现placeholder占位符,甩开ie不兼容
    jquery常用的选择器
    html+css底部自动固定底部
    css form表单样式清除
    js alert(“”)弹框 自定义样式
    Vue.js 源码分析(二十三) 指令篇 v-show指令详解
    Vue.js 源码分析(二十一) 指令篇 v-pre指令详解
    Vue.js 源码分析(二十) 指令篇 v-once指令详解
  • 原文地址:https://www.cnblogs.com/zaza-zt/p/14098261.html
Copyright © 2011-2022 走看看