NOIP2018 (TG) 滚粗记

NOIP2018 (TG) 滚粗记

by jerome_wei

本文纯属口胡


还是先分析以下两天的解题情况

DAY1

T1 铺设道路

看了一眼发现yk的讲义中我搞过这个东西,就直接写了。

T2 货币系统

​ 想了想感觉是需要找一些性质(比如选子集一定更优),害怕写错又改就先看了下 T3 ,发现 T3 大概是一个树形DP,感觉不会太难写,就先开 T2 了。 证了以下一定是选一个子集更优。然后就想到去排序然后每次看是否联通就行了。

T3 赛道修建

​ A了T1,T2发现自己时间还多,然后就冷静分析了以下题面,因为T2是按照图来理解的所以并没有否定这道题不是DP,然后再看了以下二分答案也很好的确定了。然后不难发现要记一个最多存多少。因为觉得二分答案肯定是对的,然后又发现没有合适的转移,就考虑去找以下性质。然后发现DP的时候如果是一条链它越在底端答案一定更优。然后考虑合并的时候发现还需要尽量让剩下的最大长度变得更大。于是就想到在这个地方按照长度排序然后每个长度找最小的可行的配对。当时没有证明正确性(不过越写越觉得对?),只是想保底70分(我证明了二叉树是没问题的)然后如果不是对的感觉也想不到什么其他方法就写了,然后发现调过了大样例。

D1对拍

​ 发现自己都不太会打暴力啊orz
​ 然后就T2写了个指数暴力拍了一下发现没问题,T1,T3真的不太会写其他的暴力什么的时间也不太够,就直接T1象征性的正着反着跑了一遍就没管了(那题没搞懂首尾相连是什么意思但是看样例发现不是一个环),然后T3感觉大样例对了应该不是细节问题,然后就验证算法正确性随机一个树然后随机选两个点作为根看答案有没有问题,然后还写了一个链的对拍,就没写了。
PLUS
​ 竟然评测机换成i7 8700k了,考的时候完全没有注意然后发现还在卡T2的常数

DAY2

T1 旅行

​ 貌似常数有点大?发现这题是个树或者环套树(基环树)。然后发现走的路线本质就是一颗树,每次就是按照儿子边权从小到达DFS。最开始想了下感觉没法直接找到断开的边感觉不太好做,然后就想到枚举断开的边然后跑之后发现直接跑会带个log,然后发现可以直接先把每个点的出度排好序,就成了 n^2 。
后来听说可以 O ( n ) O(n) O(n) 来着?反正我是不会的

T2 填数游戏

​ T1莫名其妙的写了很久,中途IDE还崩了一次。。。

​ 看到 就直接想到状压DP,很诧异为啥NOIP连考三年的状压。。。然后想了半个多小时发现自己连一个具有无后效性的状态都设计不出来,然后看了部分分发现50都很好打然后就把50分写了去看T3了。最后返回来看的时候还以为是DP也就没有去想找规律,自己打了一个5*5的表发现貌似找不到太多规律就没管了。然后走出考场发现这题貌似不是DP?然后发现自己骗的分远远不够啊,一堆高二的打表找规律把 的数据搞出来了。

T3保卫王国

​ T3看了一下感觉自己就算知道正解也不太调的完就先打了一个44分暴力。然后想了一下这个DP怎么优化,想到树剖维护一些东西然后发现自己又不会了,于是去看了一下发现自己貌似不太会打啊。之后看了一下各个部分分然后发现貌似都不太好打,就去看T2了(当时还是觉得T2n=3的部分分性价比高虽然还是没拿)

然后出来发现自己T3正向跑反向跑都不会了,于是滚粗。然后听说是动态DP?一脸懵逼

upd:正解是倍增?考场上想到了但是没有想出来。貌似是要先发现这个可以写成矩乘形式,然后貌似是的确可以倍增的。。。的确没想到矩阵乘法啊orz不过貌似之后看起来挺显然的?理解不深刻啊。

D2 对拍

​ 都是暴力还过了大样例,然后也写不来其他解法,就只写了T3的一个大环的数据看了一下速度,发现本机1.5s左右,然后想了想觉得 i7 8700k 应该是跑的过的,就没管了。

总结

total

​ 这次DAY1没太大问题,主要是DAY2,不知道为啥写T1的时候IDE崩了一下,幸好及时保存了给监考员反应了一下也没太大事情了。DAY2的T1写的太久了(快一个半小时),可能代码能力还是不够,然后T2,T3的暴力没有打满,可能有些东西还没想到,然后下次要注意一下不会的时候要打表找找规律看能不能骗分,然后NOIP的时间还是比较充裕的特别是这种一天都做的来一天都做不来的情况,但是貌似自己还是有点慢。然后读题没有出太大问题,不存在中途发现读错题重写的情况。就是乱搞能力变差了啊,以后该练下搜索剪枝之类的??大概就是这样了。

关于调试

​ 这次考试过样例貌似比之前的任何一次NOIp都要顺利,几乎没有出现调试很久的情况,主要调试很久的就一个地方:

//source:D1T3
//in function:dfs(int x,int pre)//dp\贪心 转移。
if(top){
	top2=0;
	sort(stk+1,stk+top+1);
	int i,j=top;
	for(i=1;i<=top;i++)if(!vis[i]){//这里最开始没有写,然后导致答案变大(重复计算一条链)
		while(j&&stk[j]+stk[i]>=len){
			if(!vis[j])stk2[++top2]=j;j--;
		}
		while(top2&&stk2[top2]<=i)top2--;
		if(top2){
			vis[stk2[top2--]]=true,vis[i]=true;
			Dpsum++;
		}
	}
}

这个东西考场上纯粹是运气好调的不久的,以后还是要想仔细一点。
Ps:开Wall真的好用啊

关于心态

​ 今年心态是真的没啥压力,但是考前还是明显的感觉到紧张,然后考试中都做题去了就没那感觉了。。。
然后晚上休息还不错,没出现考场睡觉的情况。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值