A JYU签到题
验证码为10582,输出一个整数38∗1058238*1058238∗10582即可
B 输出第二个整数
简单读入三个数a,b,ca,b,ca,b,c然后输出bbb即可
C 只因数
具有欺诈性质的题目,可以发现偶质数只有2,故只需要判断nnn的奇偶性。
D 62
题目数据范围较小,可以直接读入一个long long类型的整数xxx,然后判断是否是62的倍数,否则将其转化为字符串,然后判断是否存在62。
E 团体程序设计天梯赛
根据题目所给要求模拟即可。
F 刷刷刷
注意到每次粉刷会直接覆盖掉之前的粉刷颜色,且数据范围较小,直接根据kkk次粉刷操作进行for循环模拟,注意边界条件。
G XCPC比赛
首先计算此时已经获得的分数,如果此时已经达到Au线,则直接结束,否则计算差值k,对于每一道已经满分的题目,显然不可能达成要求。
而对于未满分的题目,判断该 题目满分 - 此时已达到的分数 是否能够>=k>=k>=k,如果满足输出kkk即可。
H 排排排
赛时这道题目分值出现了问题,后续想通过加权通过达到20分,发现由于洛谷的问题,难以设置达到20分,在此致歉。
该题目主要考察对STL容器和sort的使用,如果懂得则可以很快做出。由于ai<=Ca_i<=Cai<=C,而我们又需要计数,普通数组存不下,开CCC的空间可能会爆,此时可以用map充当数组使用。后续直接调用sort重定义排序。
该题如若不想使用map,则可以离散化数组。如果不想用sort,由于该题n只有10310^3103,故冒泡排序也可通过。
I 展展展
根据题意模拟,以’-‘号为分隔符对题意得情况进行讨论。
判断左右两边是哪种情况时记得判断大小的同时保证都是数字或字母,因为可能会出现连续的’-‘,只单纯比较大小和左右两边非相同类型会出问题。
J 加加加
对于a<104a<10^4a<104的时候,我们可以暴力枚举+快速幂求解。
对于a>=104a>=10^4a>=104的情况,我们设一个数x(x>=104)x(x>=10^4)x(x>=104),我们假设此时只求一个数xxx,那么xbx^bxb可以拆解为(k∗104+xx)b(k*10^4+xx)^b(k∗104+xx)b,此时x=k∗104+xxx=k*10^4+xxx=k∗104+xx,kkk为正整数,那么由二项式定理,我们可以发现里面只有一项是(k∗104)0xxb(k*10^4)^0xx^b(k∗104)0xxb,其他每一项都包括k∗104k*10^4k∗104的的倍数,故在mod(104)mod(10^4)mod(104)下值均为000,所以对于x>=104x>=10^4x>=104的数,我们只需要计算x(mod)104x(mod)10^4x(mod)104下的答案,显然1,104+1,2∗104+1,...,k∗104+11,10^4+1,2*10^4+1,...,k*10^4+11,104+1,2∗104+1,...,k∗104+1答案等价于111。[2,104][2,10^4][2,104]也同理,故我们可以算出a里面总共有多少个[1,104][1,10^4][1,104],然后计算答案,注意边界。
暴力枚举+快速幂没分的基本是数据爆了。
K 晒晒晒
该题解法较多,这里介绍一种优先队列贪心写法。
由于只有一台烘衣机,而显然每秒应该尽可能得让最湿的衣服去用烘衣机烘干,这样一定是最优的。我们考虑证明。假设此时存在两件湿衣服x,yx,yx,y,并且x>yx>yx>y,此时自然风干为aaa,烘衣机烘干为bbb,对于每一次操作,max(x/(a+b),y/a)<=max(x/a,y/(a+b))max(x/(a+b),y/a)<=max(x/a,y/(a+b))max(x/(a+b),y/a)<=max(x/a,y/(a+b)),即对于每一次操作,我们都是最优解,而局部最优在这道题能推出全局最优。考虑反推证明。
L 挤挤挤
简单的写法,考虑最小生成树,直接跑一遍同时记录跑时的最大值即可
稍微复杂的写法,二分答案www,每次跑DFS或者BFS,对于边权小于等于www的就走,大的就不走,最后判断是否每个点都被走过
M Alice和Bob
赛时有人通过暴力卡了过去得到了满分,出题人数据人水了,后面有空加强数据。
正解应该是考虑单调栈,对于每个操作,不难发现就是单调栈要维护的东西,假设i<ji<ji<j,且ai<aja_i<a_jai<aj如果此时我在jjj这个位置,且iii这个位置的操作次数记为fif_ifi,则fj=fi+1f_j=f_i+1fj=fi+1,后续判断fif_ifi的奇偶性即可。
N 炸炸炸
注意输出格式。
由于数据范围较小,考虑枚举炸的铁路,然后判断是否存在两个连通块。
关于连通块的判断,可以采取DFS或者并查集判断,总的时间复杂度为O(m*m)。
如果数据范围比较大,该如何做?
O 简单的数学题
对于ax+b≡y(mod998244353)ax+b≡y(mod998244353)ax+b≡y(mod998244353) ,这个问题显然可以用扩展欧几里得求解。而对于下面的操作,用树状数组维护即可,所以这道题就变成简单的树状数组维护+扩展欧几里得求解的问题。
而我们考虑模数,发现模数是个质数,则我们可以直接用逆元求解。
对于模数固定的同余式子,其实我们大多时候可以不用扩偶,可以考虑求逆元的方式。
P 等等等
略
Q Passable Paths (hard version)
题意简单就是每次给你一大小为m的点集,判断这些点集是否在一条链上
我们考虑链上的点有何性质,假设此时给你一条链,我们设链上的两个端点分别为x和y,定义d[x][y]d[x][y]d[x][y]为xxx到yyy的距离,则设链上另一个点uuu,则如果uuu在链上,那么就得满足d[x][u]+d[u][y]=d[x][y]d[x][u]+d[u][y]=d[x][y]d[x][u]+d[u][y]=d[x][y],否则u肯定不在这条链上。
那么现在问题变成如何求出这条链上的两个端点,暴力肯定会超时。那么我们考虑平时树上求最长链的方法,两遍DFS的方法。我们先任找一个点vvv,找到距离vvv最远的点,设为xxx,然后再跑一边求离xxx最远的点,设为yyy,此时(x,y)(x,y)(x,y)即为链上两个端点。然后对于点集上的每一个点,判断d[x][u]+d[u][y]=d[x][y]d[x][u]+d[u][y]=d[x][y]d[x][u]+d[u][y]=d[x][y]是否都成立即可。
对于上述如何找离某个点最远的点,可以先做一遍最近公共祖先(LCA),然后通过LCA快速判断两个点的距离,便可以找出离他最远的点。