[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
(方法会就行了,这道题考的不是质数的选取,质数照抄就行了)
1 #include <bits/stdc++.h> 2 using namespace std; 3 char s[105][10005]; 4 int p[4] = {17389, 22349, 22367, 22369}; 5 int n, a[105], ans[1000005]; 6 bool vis[5][27005]; 7 8 bool check(int x) 9 { 10 if(!vis[0][x % 17389]) return false; 11 if(!vis[1][x % 22349]) return false; 12 if(!vis[2][x % 22367]) return false; 13 if(!vis[3][x % 22369]) return false; 14 return true; 15 } 16 17 bool is_zero(int k, int x) 18 { 19 long long ans = a[n]; 20 for(int i = n - 1; ~i; --i) 21 ans = (ans * x + a[i]) % p[k]; 22 return !ans; 23 } 24 25 int main() 26 { 27 int m, tot = 0; 28 scanf("%d%d", &n, &m); 29 for(int i = 0; i <= n; ++i) 30 scanf("%s", &s[i]); 31 for(int i = 0; i < 4; ++i) 32 { 33 memset(a, 0, sizeof(a)); 34 for(int j = 0; j <= n; ++j) 35 if(s[j][0] == '-') 36 for(int k = 1; s[j][k]; ++k) 37 a[j] = (a[j] * 10 - s[j][k] + 48 + p[i]) % p[i]; 38 else 39 for(int k = 0; s[j][k]; ++k) 40 a[j] = (a[j] * 10 + s[j][k] - 48) % p[i]; 41 for(int j = 1; j < p[i]; ++j) 42 vis[i][j] = is_zero(i, j); 43 } 44 for(int i = 1; i <= m; ++i) 45 if(check(i)) ans[++tot] = i; 46 printf("%d\n", tot); 47 for(int i = 1; i <= tot; ++i) 48 printf("%d\n", ans[i]); 49 return 0; 50 }
View Code
转载于:https://www.cnblogs.com/CtrlCV/p/5620082.html
[BZOJ3751] [NOIP2014] 解方程 (数学)相关推荐
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4856 Solved: 983 [Submit][Stat ...
- bzoj 3751: [NOIP2014]解方程(同余系)
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3983 Solved: 850 [Submit][Stat ...
- [CodeForces-1138B] *Circus 解方程|数学
题意:有两场表演,n个艺术家,根据规则找出我们要挑选的人的编号,输出编号. 规则1 保证每个人只能参加一场表演,也就是同一个艺术家不能出现在两场表演中 规则2 两场表演参演的艺术家的数量是相同的 规则 ...
- [NOIP2014] 解方程
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...
- 【codevs3732】【BZOJ3751】解方程,hash+秦九韶算法
传送门1 传送门2 写在前面:傻逼字符串毁我青春,颓我精神 思路: 30分:直接暴力1-m枚举就行,每次进行n次运算,然后验证即可,时间复杂度O(nm) 50分:在30分的基础上加上高精度(听Shal ...
- LeetCode 441. 排列硬币(数学解方程)
1. 题目 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整型的范围 ...
- 【pyhton解决数学问题】2用python解方程
目录 1Sympy的基本概念 1符号计算 2计算机代数系统 3实际解方程 1把未知数设为符号 2用solve()解方程 1解一元一次方程 2解二元一次方程组 3解决一元二次方程 总结 哈喽,大家好! ...
- python数学方程计算_用Python解方程
一元一次方程 例题1: 这是北师大版小学六年级上册课本95页的一道解方程练习题: 大家可以先口算一下,这道题里面的x的值为200 接下来我们用python来实现,代码如下,每一句代码后面都写有解释语: ...
- 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...
最新文章
- 四川大学计算机学院男女生比例,川大、电子科大新生男女比例大PK 比例更佳的是……...
- wpf(c#)中获取ComboBox选项值
- Java的知识点26——File_API
- ACM中java的使用 (转)
- java之Arrays工具类的使用
- 删除linux目录下一半的文件,Linux面试题(一):删除一个目录下的所有文件,但保留一个指定文件...
- linux主机添加discuz伪静态规则,Discuz! X2.5论坛win主机与linux主机伪静态设置方法...
- 项目【QT5.13频谱分析软件】(一)——开篇介绍
- IDEA 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun.
- java 生成交易快照_Java生成订单号/交易流水号
- Ubuntu20.04安装nvidia显卡驱动并解决重启后黑屏问题
- 独家首发|汇聚知识 理解世界——百度王海峰谈知识图谱的最新演讲笔记
- 写给那些进步缓慢却全然不知的IT人
- 华为网络工程师项目模拟
- 质量改进与可靠性提升,硬核案例学习在这里
- 最详细的语言***教程大全
- 一些技巧,如何更高层次编写优质嵌入式C代码?
- Latex报错:xxxx.sty文件不存在解决方案
- 国外程序员整理的Java资源大全
- Maxon宣布推出Cinebench Release 20
热门文章
- SharePoint 向多行文本类型字段插入特殊类型链接
- lo ate my IP address问题解决
- movielens推荐系统_浅谈推荐系统+3个小时上手python实现(完整代码)
- computed get set 传参_ES6 的 Set 与 Map深入理解
- 关于strlwr,strupr等函数在此作用域中尚未声明的问题
- 如何一站式快速构建企业全场景数据库管理平台?
- 2021阿里巴巴研发效能峰会来啦!
- AI 云原生浅谈:好未来 AI 中台实践
- 高德最佳实践:Serverless规模化落地有哪些价值?
- 简历石沉大海、面试被刷?拒绝你的HR小姐姐,可能只是个AI