[BZOJ3751] [NOIP2014] 解方程 (数学)
Description
Input
Output
Sample Input
2
-3
1
Sample Output
1
2
HINT
对于100%的数据,0<n≤100,|ai|≤10^10000,an≠0,m≤1000000。
Source
Solution
考虑对等式左边整体对质数取模,这部分用秦九韶算法实现可以大大提速,并且可以避免大量的高精度运算
假设模数为$p$,不难发现在模$p$意义下$x$与$x+kp$得到的结果一样,所以我们可以预处理出$[0,p)$的答案,推出$[1,m]$是否可能是解
因为$p$很小会有类似哈希冲撞的事发生,所以我们可以选取多个$p$。据说是选$5$个$20000$左右的质数就可以,然而我换过好几个质数,不是$WA$就是$TLE$,QAQ
代码里的质数是网上找的,并不清楚为什么这人的人品能那么好QAQ,$4$个质数就可以$AC$QAQ
(方法会就行了,这道题考的不是质数的选取,质数照抄就行了)
#include <bits/stdc++.h>
using namespace std;
char s[][];
int p[] = {, , , };
int n, a[], ans[];
bool vis[][]; bool check(int x)
{
if(!vis[][x % ]) return false;
if(!vis[][x % ]) return false;
if(!vis[][x % ]) return false;
if(!vis[][x % ]) return false;
return true;
} bool is_zero(int k, int x)
{
long long ans = a[n];
for(int i = n - ; ~i; --i)
ans = (ans * x + a[i]) % p[k];
return !ans;
} int main()
{
int m, tot = ;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i)
scanf("%s", &s[i]);
for(int i = ; i < ; ++i)
{
memset(a, , sizeof(a));
for(int j = ; j <= n; ++j)
if(s[j][] == '-')
for(int k = ; s[j][k]; ++k)
a[j] = (a[j] * - s[j][k] + + p[i]) % p[i];
else
for(int k = ; s[j][k]; ++k)
a[j] = (a[j] * + s[j][k] - ) % p[i];
for(int j = ; j < p[i]; ++j)
vis[i][j] = is_zero(i, j);
}
for(int i = ; i <= m; ++i)
if(check(i)) ans[++tot] = i;
printf("%d\n", tot);
for(int i = ; i <= tot; ++i)
printf("%d\n", ans[i]);
return ;
}
[BZOJ3751] [NOIP2014] 解方程 (数学)的更多相关文章
- [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...
- BZOJ 3751: [NOIP2014]解方程 数学
3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...
- [BZOJ3751][NOIP2014] 解方程
Description 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). Input 第一行包含2个整数n.m,每两个 ...
- BZOJ3751 NOIP2014 解方程(Hash)
题目链接 BZOJ3751 这道题的关键就是选取取模的质数. 我选了4个大概几万的质数,这样刚好不会T 然后统计答案的时候如果对于当前质数,产生了一个解. 那么对于那些对这个质数取模结果为这个数的数 ...
- 【秦九韶算法】【字符串哈希】bzoj3751 [NOIP2014]解方程
在模意义下枚举m进行验证,多设置几个模数,而且小一些,利用f(x+p)%p=f(x)%p降低计算次数.UOJ AC,bzoj OLE. #include<cstdio> #include& ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
- LOJ2503 NOIP2014 解方程 【HASH】
LOJ2503 NOIP2014 解方程 LINK 题目大意就是给你一个方程,让你求[1,m]中的解,其中系数非常大 看到是提高T3还是解方程就以为是神仙数学题 后来研究了一下高精之类的算法发现过不了 ...
- bzoj 3751: [NOIP2014]解方程 同余系枚举
3.解方程(equation.cpp/c/pas)[问题描述]已知多项式方程:a ! + a ! x + a ! x ! + ⋯ + a ! x ! = 0求这个方程在[1, m]内的整数解(n 和 ...
- bzoj3751 / P2312 解方程
P2312 解方程 bzoj3751(数据加强) 暴力的一题 数据范围:$\left | a_{i} \right |<=10^{10000}$.连高精都无法解决. 然鹅面对这种题,有一种常规套 ...
随机推荐
- Hive metastore源码阅读(二)
最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展.比如:在create_table的时候同时进行路径校验及创建,如下代码: ...
- windows下apache服务器开启压缩和网页缓存
找到配置文件:http.conf apache开启压缩 一.开启配置,去除下面代码前面的#号LoadModule deflate_module modules/mod_deflate.soLoadMo ...
- iOS 8 UIAlertController 和 UIAlertAction
将alertView 和 actionSheet 封装在UIAlertController 里面化整为零,使开发者更便利 当我们一味的追求高内聚,低耦合的时候,伟大的苹果反其道而行之,这也告诉了我们一 ...
- angular2-qrcode (转)
插件选择 angular2-qrcode npm install angular2-qrcode --savecnpm install angular2-qrcode --save 参考github ...
- solr6.6教程-基础环境搭建(二)
在上一篇文章中已经简单介绍了solr在windows的部署,今天我们来下如何新建一个自己core. 1,core理解 如果把solr理解为个数据库的话,那么core可以理解为数据库中的一张表,其实就是 ...
- UVA - 10723 类似LCS
思路:dp(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串长度,cnt(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串的个数. 转移方程: if(s1[i] ...
- yaf插件类的使用
yaf插件类的使用大小写敏感的. "插件名Plugin"为插件类的名字,这样会自动标志着这是一个插件. application.directory string 应用程序的目录,包 ...
- 禁掉coolie,session还能正常使用吗?
Cookie禁用了,Session还能用吗? Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案 ...
- vue项目中遇到的问题
在 export defaul new Router({ )} 这个路由配置中一定要加mode : 'history' 否者就会在路由前面默认添加# 路由跳转的几种方式: 在VUE中使用less来编译 ...
- myeclipse8.5打包jar并引入第三方jar包
用myeclipse自带的export工具,无法引入被引用的第三方的jar包,有两种方式: (1)直接export出jar包,解压jar包(第三方的jar包太多,太麻烦) 在创建好的JAR文件里找到M ...