NOIP 2014 解方程 Hash Hash Hash
2015-10-16 20:36
501 查看
hash,同余类,hash,同余类,hash,同余类。先默念三遍。简直神器。
这个多项式方程每个系数都是1w位的数,一看就知道必须要取模。70分做法就是取模,直接暴力算每个数是不是解,模的数好的情况下可以拿70,T3个点。
怎么过这三个点呢?多项式方程f(x)是满足f(x) % p == f(x+p) % p的,这也是上述70分做法成立的原因。正解就是对于p的每个同余类,判断是否为解,如果x为解,x+p同样为解。但这是在模p意义下的,既然我们在每个同余类中计算来节省时间,p就不能太大,为了保证正确性,我们可以多取几个p,同时满足才为解。根据算法复杂度计算,p取sqrt(nm)附近时是比较优的。
这个多项式方程每个系数都是1w位的数,一看就知道必须要取模。70分做法就是取模,直接暴力算每个数是不是解,模的数好的情况下可以拿70,T3个点。
怎么过这三个点呢?多项式方程f(x)是满足f(x) % p == f(x+p) % p的,这也是上述70分做法成立的原因。正解就是对于p的每个同余类,判断是否为解,如果x为解,x+p同样为解。但这是在模p意义下的,既然我们在每个同余类中计算来节省时间,p就不能太大,为了保证正确性,我们可以多取几个p,同时满足才为解。根据算法复杂度计算,p取sqrt(nm)附近时是比较优的。
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n, m, num, a[6][105]; int P[6] = {0, 10007, 10093, 10957, 12917, 13187}; char s[10005]; bool ok[1000005]; int f(int x, int mod) { int res = 0; x %= P[mod]; for(int i = 0, j = 1; i <= n; i++) { res = (res+a[mod][i]*j%P[mod])%P[mod]; j = j * x % P[mod]; } return res; } bool judge(int x) { for(int i = 2; i <= 5; i++) if(f(x, i)) return 0; return 1; } int main() { scanf("%d %d", &n, &m); for(int i = 0; i <= n; i++) { scanf("%s", s+1); int k = 1; bool neg = 0; if(s[k] == '-') neg = 1, k++; for(int j = 1; j <= 5; j++) { int t = k; while(s[t]) a[j][i] = (a[j][i]*10+s[t++]-48)%P[j]; if(neg) a[j][i] = -a[j][i]; } } for(int i = 1; i <= min(P[1], m); i++) if(!f(i, 1)) { ok[i] = 1, num++; int t = i; while(t+P[1] <= m) ok[t+=P[1]] = 1, num++; } for(int i = 1; i <= m; i++) if(ok[i] && !judge(i)) ok[i] = 0, num--; printf("%d\n", num); for(int i = 1; i <= m; i++) if(ok[i]) printf("%d \n", i); return 0; }
相关文章推荐
- c语言实现hashmap(转载)
- Ruby中Hash的11个问题解答
- Ruby简明教程之数组和Hash介绍
- 在C#中生成与PHP一样的MD5 Hash Code的方法
- js中hash和ico的关联分析
- Javascript SHA-1:Secure Hash Algorithm
- 理解php Hash函数,增强密码安全
- PHP利用hash冲突漏洞进行DDoS攻击的方法分析
- PowerShell中定义哈希散列(Hash)和调用例子
- Redis String 类型和 Hash 类型学习笔记与总结
- php操作redis中的hash和zset类型数据的方法和代码例子
- Perl 哈希Hash用法之入门教程
- perl哈希hash的常见用法介绍
- php自定义hash函数实例
- php对文件进行hash运算的方法
- php常用hash加密函数
- PHP Hash算法:Times33算法代码实例
- php的hash算法介绍
- memcache一致性hash的php实现方法
- Mysql中的Btree与Hash索引比较