1374D. Zero Remainder Array Problem - 1374D - Codeforces
给定一个正整数 k。称一个长度为 n 的正整数序列 1,...,a1,...,an 是好的当且仅当对于每个 ai 都有 k 整除 ai。
现在给定了这个数组 a。有一个变量 x,初始时为 00。将进行若干次操作,每次操作如下:
- 选择一个 (1≤i≤n),然后令 ai=ai+x;或者什么都不做;
- 令 x=x+1。
问至少多少次操作后能把 a 变成好的。
思路
水题,实际上x可以视为0~k-1的循环,先求出每个数与k的倍数的最小差值k-a%k,再按差值统计各差值的出现次数,map[k-a%k]++
对于每个统计量 ans=max(ans,(map[x]-1)*k+x+1)
1375C. Element Extermination Problem - 1375C - Codeforces
给定一个 1 到 n 的排列 a。在一次操作中,你可以选择一个满足 ai<ai+1 的下标 (1≤i<n),删除 ai 或ai+1。
你需要求出是否可能通过若干次操作使得 a 只剩下一个元素。
思路
优先栈?
1)为空时直接放入,a[i]<a[i-1]时直接放入
2)对于a[i]>a[i-1]的情况分两种第一种不放入①,第二种将栈内小于a[i]的元素全部弹出后放入②
分两部分模拟,两部分的分界点为“当前位之后是否有比自己小的数”
对于前半部分使用①,后半部分使用②。
前半部分维护一个递减序列。在后半部分一次性弹出。
1350B. Orac and Models Problem - 1350B - Codeforces
给出一个长度为 n 的序列 a,并令 s 为a 的子序列,posi 为 si 在原序列里的位置
当且仅当sj<sj+1 且 posj+1%posj==0时,序列 s 是美丽的
你需要求出序列 a 的最长的美丽子序列的长度
思路
dp题,求最长“美丽”子序列
模拟即可,对于当前位置cur,对每个x*cur位置,判断是否满足s[x*cur]>s[cur],若满足说明存在一个子序列
状态转移方程
FOR(i,1,n)
for (int j = i*2; j <=n ; j+=i)
if(a[j]>a[i]) dp[j]=max(dp[j],dp[i]+1);
1285C. Fadi and LCM Problem - 1285C - Codeforces
- 输入一个整数 X。
- 输出使 max(a,b) 最小的任意一组 a,b,其中lcm(a,b)=X。
思路
水题,数据出的不行
由于只有一个数据,且X<,可以直接暴力搜索sqrt(x)~1。
1542B. Plus and Multiply Problem - 1542B - Codeforces
有一个无穷大的正整数集合 S,该集合按下面所述方法生成:
-
数字 1 在集合 S 中。
-
若数字 x 在该集合中,那么数 x×a 和数 x+b 均在集合 S 中。(其中 a 与 b 为给定常数)
现在给出数 n,a,b,请判断 n 是否在集合 S 中(此处给出的 a 与 b 就是上述集合生成方法中的 a 和 b),若在请输出 Yes
,否则输出 No
。
思路
可以看出(x+n*b)*ma=x*ma+(b+b+b+...),有这一条可以假设所有数都可以递归的拆分为多项式
也就是说两操作顺序没有意义,可以直接将序列中的每个数视为
那么当a≠1时,可以遍历i,再判断是否有j使公式满足。
当a=1时,式子只有唯一解。