Hdu 5763 Another Meaning
链接
题意
给定句子A和单词B,单词B可表示两种意思,问句子A可表示多少种意思
分析
令dp[i]表示到i结尾的字符串可以表示的不同含义数,那么考虑两种转移:
末尾不替换含义:dp[i-1]
末尾替换含义:dp[i-|B|] (A.substr(i-|B|+1,|B|) = B,即可匹配)
那么对于末尾替换含义的转移,需要快速判断B能不能和当前位置的后缀匹配,
kmp或者hash判断即可。直接strstr也可过。
参考代码
1 | #include<stdio.h> |
Hdu 5768 Lucky7
链接
题意
求[l,r]范围内是7的倍数,同时不满足任意一个给定的同余式的数的个数。
如范围为[1,100],不满足模3余2或模5余3的7的倍数有7,21,42,49,70,84,91 ,故答案为7.
分析
因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题。当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的数的个数,可以看成若干个同余方程联立成的一次同余方程组。然后我们就可以很自然而然的想到了中国剩余定理。需要注意的是,在处理中国剩余定理的过程中,可能会发生超出LongLong的情况,需要写个类似于快速幂的快速乘法来处理。
参考代码
1 | #include<stdio.h> |
Hdu 5773 The All-purpose Zero
链接
题意
已知一个整数序列(不小于0),其中0可以被替换成任意整数,求能得到的最长子序列的长度
分析
0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的。因此我们可以把0拿出来,对剩下的数将每个权值S[i]减去i前面0的个数,再做LIS,就能保证结果是严格递增的。最后再算上0的数量。时间复杂度O(nlogn)
参考代码
1 | #include<stdio.h> |
Hdu 5774 Where Amazing Happens
链接
题意
已知一份获奖名单,每次询问给定一个队伍名,问其获得过几次奖
分析
先对获奖名单预处理,每次查询直接输出即可
参考代码
1 | #include<stdio.h> |
Hdu 5775 Bubble Sort
链接
题意
已知n的一个排列,问按照冒泡排序,每个数能到达的最右位置与最左位置的差
分析
考虑一个位置上的数字c在冒泡排序过程的变化情况。c会被其后面比c小的数字各交换一次,
之后c就会只向前移动。数组从右向左扫,用线段树维护一下得到每个值右边有多少个比其小的值,
加上原位置得到最右位置,最左位置为初始位置和最终位置的最小值。
参考代码
1 | #include<stdio.h> |