摘要:
Revolving Digits HDU - 4333 题意:给一串数字,每次可以把最后一个移到最前面形成一个新的数字,问所有的数字中有多少比原数大、小、相等。 原数字为s,长度为len,那么一共形成len数字。 令t=s+s(连接),接下来利用扩展KMP找到t[i]对应的extend[i],然后去 阅读全文
摘要:
A Secret HDU - 6153 题意:给两个串s1,s2,问s2的所有后缀在s1中出现的次数乘以后缀长度的和是多少。 首先将串翻转,然后KMP即可。 通过这个题我也认识到对很多简单的算法理解的不够深刻,学了也就只会耍耍模板,以后要多思考思考。 1 #include <bits/stdc++. 阅读全文
摘要:
Palindrome Function HDU - 6156 题意:L到R之间的数x,写成k进制(l<=k<=r)后,如果是回文串,那么f(x,k)=k,否则f(x,k)=1,对f求和。 数位dp dp[len][cur][sta][k] 长度、当前位置、是否是回文、k进制 1 #include < 阅读全文
摘要:
Lucky Number ZOJ - 3233 题意:给出数组a和b,问区间[L,R]之间有多少个数至少能被数组a中的一个数整除且至少不能被数组b中的一个数整除。 对于数组a,直接容斥 数组b,可以求全都能被乘除的情况,减去就可以了。 1 #include <bits/stdc++.h> 2 usi 阅读全文
摘要:
Number Puzzle ZOJ - 2836 题意:求不大于m的数中,有多少可以被数组a中的数整除。 二进制枚举,容斥 1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[11]; 4 int n,m; 5 int gcd(int 阅读全文
摘要:
GCD HDU - 1695 题意:给你5个数a,b,c,d,k。x属于[a,b]y属于[c,d]。 问你有多少对(x,y)的公约数为k。 注意(x,y)和 (y,x)视为同一对,a和c为1。 通过b/k,d/k,等价于把区间除以k,那么就变成了求有多少对(x,y)互素。 欧拉函数+容斥原理。 注意 阅读全文
摘要:
Visible Trees HDU - 2841 题意: N*M的格点上有树(从1开始),从0,0点可以看到多少棵树。 gcd(x,y)!=1的格子看不到。 对每一列分别去求那些行的格子可以看到。 先预处理出1到m的素因子,然后利用容斥原理,对于行数是(偶数个素因子的积)的倍数的行,加上,否则减去。 阅读全文
摘要:
阅读全文
摘要:
Intelligence System HDU - 3072 题意:一个人要传递命令给所有人,如果两人之间互达,不需任何费用,求最少费用 有向图强连通。 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int inf=0x3f3f3 阅读全文
摘要:
The Largest Clique UVA - 11324 题意:有向图最大团。求任意两点可达(不是互达)的最多点数。 先求出SCC,然后缩点,新图就变成了一个DAG,每个点的权值为内点的个数,用DP求解最大值。 1 #include <bits/stdc++.h> 2 using namespa 阅读全文