2018年清华大学软件学院夏令营 机试 题解

所有数据均为单组输入

题目1:输入a,b,输出[a,b]间的所有回文数(回文数例如13631)

题解:for(i=a;i<=b;i++) 如果i是回文数,输出i

题目2:给出一个现成的满足凸函数性质的数组f[],再给出a和b,求f[i]-a[i]-b的最大值

题解:三分求最大值

题目3:给出n(n<=100)个素数,求所有能被这些素数整除的数(能被任一素数整除即可)中,第k小的数(k<=1e5),并且已知ans不超过2^32-1。

题解:对[1,INF=2^32-1]区间二分找查找x(x满足,[1,x]有k个能被已知素数整除的数,[1,x-1]有k-1个能被已知素数整除的数),求[1,x]间有多少个能被已知素数整除时,可以使用容斥原理的思想,我用的是dfs+剪枝(剪枝依据素数的积不超过INF)的方法

题目4:给出一个无向图,求将某条边的长度变为原来的1/2后,所能得到的1->n的最短路的长,同时需要给出对应边的编号

题解:分别以1和n为起点跑最短路,得到dis1[i]、dis2[i],之后找min({dis1[edge[i].u]+dis2[edge[i].v]+edge[i].d})及对应的i即可。

//吐槽一下:时间给的很长,三小时,一道签到+三个北大17年前8题难度的题,相对较简单,不像去年九推考到了网络流(这次白提前背了网络流板子。。),但是机试环境很不友好,OI赛制可能是学院有学院的考虑,但是C/C++的IDE只提供一个卡的要死的VS2012,本来那电脑就够卡的了,而且作为之前没用过VS的,全程举手问了好几遍助教学长某一步该如何操作(感谢学长耐心解答)才一瘸一拐的码完溜掉。希望不会有什么莫名的bug orz

猜你喜欢

转载自www.cnblogs.com/Just--Do--It/p/9159911.html