[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}$.连高精都无法解决. 然鹅面对这种题,有一种常规套 ...
随机推荐
- ConcurrenHashMap源码分析(二)
本篇博客的目录: 一:put方法源码 二:get方法源码 三:rehash的过程 四:总结 一:put方法的源码 首先,我们来看一下segment内部类中put方法的源码,这个方法它是segment片 ...
- ajax常用操作
load的方法的使用(现在已不常用) <!doctype html><html lang="en"><head> <meta charse ...
- 【应知应会】15个常用的JavaScript字符串操作方法
1 初始化 //常用初始化方法 var stringVal = "hello iFat3"; //构造函数创建方法 var stringObj = new String(" ...
- Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)
一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...
- Android -传统蓝牙通信聊天
概述 Android 传统蓝牙的使用,包括开关蓝牙.搜索设备.蓝牙连接.通信等. 详细 代码下载:http://www.demodashi.com/demo/10676.html 原文地址: Andr ...
- Java经典编程题50道之二十七
求100之内的素数. public class Example27 { public static void main(String[] args) { prime(); } ...
- 02 Java类的加载机制
1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...
- python开发concurent.furtrue模块:concurent.furtrue的多进程与多线程&协程
一,concurent.furtrue进程池和线程池 1.1 concurent.furtrue 开启进程,多进程&线程,多线程 # concurrent.futures创建并行的任务 # 进 ...
- hihoCoder Demo Day dp
题意:有一个机器人被困在一个的迷宫中,机器人的初始位置是,目的地是,并且它的移动方式很奇怪:只能一直向右,直到不能再向右才能把方向变成向下:只能一直向下,直到不能再向下才能把方向变成向右.迷宫中的每个 ...
- Spring 框架系列之事务管理
1.事务回顾 (1).什么是事务: 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. (2).事务特性(ACID) 原子性 :强调事务的不可分割 一致性 :事务的执行的 ...