思路:

系数的范围有$10^{10000}$,但是用高精度做显然不现实,因此可以考虑一个类似于“哈希”的做法,
对方程两边同时取模,如果取的模数足够多,正确率就很高了。
中间对多项式的计算可以使用$O(n)$的秦九韶算法。
然而,我的模数试了很多种都不能A,看了题解发现只要对$1000000007$一个数取模就AC了?

 #include<cstdio>
#include<cctype>
const long long mod=;
inline long long getll() {
bool sgn=false;
char ch;
while(!isdigit(ch=getchar())) if(ch=='-') sgn=true;
long long x=ch^'';
while(isdigit(ch=getchar())) x=((((x<<)+x)<<)+(ch^''))%mod;
return sgn?-x:x;
}
const long long N=,M=;
long long n;
long long a[N];
long long ans[M]={};
inline bool check(const long long x) {
long long sum=;
for(long long i=n;i>=;i--) {
sum=(sum*x+a[i])%mod;
}
return sum==;
}
int main() {
n=getll();
long long m=getll();
for(long long i=;i<=n;i++) a[i]=getll();
for(long long i=;i<=m;i++) {
if(check(i)) ans[++ans[]]=i;
}
for(long long i=;i<=ans[];i++) printf("%lld\n",ans[i]);
return ;
}

试了很多个模数都没能AC的代码:

 #include<tuple>
#include<cstdio>
#include<cctype>
inline int getint() {
char ch;
while(!isdigit(ch=getchar()));
int x=ch^'';
while(isdigit(ch=getchar())) x=((((x<<)+x)<<)+(ch^''));
return x;
}
const int mod_size=;
const int mod[mod_size]={,,,,};
inline std::tuple<int,int,int,int,int> gettuple() {
bool sgn=false;
char ch;
while(!isdigit(ch=getchar())) if(ch=='-') sgn=true;
int x[mod_size];
for(int i=;i<mod_size;i++) x[i]=ch^'';
while(isdigit(ch=getchar())) {
for(int i=;i<mod_size;i++) {
x[i]=((((x[i]<<)+x[i])<<)+(ch^''))%mod[i];
}
}
return sgn?std::make_tuple(mod[]-x[],mod[]-x[],mod[]-x[],mod[]-x[],mod[]-x[]):std::make_tuple(x[],x[],x[],x[],x[]);
}
const int N=,M=;
int n;
int a[mod_size][N];
int ans[M]={};
inline bool check(const int x) {
int sum[mod_size];
for(int i=n;i>=;i--) {
for(int j=;j<mod_size;j++) {
sum[j]=(sum[j]*x%mod[j]+a[j][i])%mod[j];
}
}
bool ret=true;
for(int i=;i<mod_size;i++) ret=ret&&!sum[i];
return ret;
}
int main() {
n=getint();
int m=getint();
for(int i=;i<=n;i++) {
std::tuple<int,int,int,int,int> p=gettuple();
a[][i]=std::get<>(p);
a[][i]=std::get<>(p);
a[][i]=std::get<>(p);
a[][i]=std::get<>(p);
a[][i]=std::get<>(p);
}
for(int i=;i<=m;i++) if(check(i)) ans[++ans[]]=i;
for(int i=;i<=ans[];i++) printf("%d\n",ans[i]);
return ;
}

[NOIp2014提高组]解方程的更多相关文章

  1. NOIP2014提高组解方程

    其实没有太难 但是不知道的话想不到 考场上大概有50分吧 #include <iostream> #include <stdio.h> #include <queue&g ...

  2. [NOIP2014] 提高组 洛谷P2038 无线网络发射器选址

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  3. 刷题总结——飞扬的小鸟(NOIP2014提高组)

    题目: 题目背景 NOIP2014 提高组 Day1 试题. 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面 ...

  4. 垃圾陷阱 && [NOIP2014 提高组] 飞扬的小鸟

    #include<bits/stdc++.h> using namespace std; int d,n,dp[1010]; struct node{int t,f,h;} a[1010] ...

  5. NOIP2014提高组 酱油记

    NOIP考到哪里我就写到哪里好了. 2014/10/12 初赛 下午两点半开始考,我两点就到了.然后看到了QYL,NYZ,CZR等大神,先Orz了再说. 考试开始前,发现考场竟然没几个我认识的,不是按 ...

  6. noip2014 提高组

    T1 生活大爆炸版 石头剪刀布 题目传送门 就是道模拟题咯 #include<algorithm> #include<cstdio> #include<cstring&g ...

  7. NOIP2014提高组 题解报告

    D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...

  8. 【学术篇】luogu1351 [NOIP2014提高组] 联合权值

    一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...

  9. [NOIP2014] 提高组 洛谷P2312 解方程

    题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...

随机推荐

  1. bzoj千题计划241:bzoj3864: Hero meet devil

    http://www.lydsy.com/JudgeOnline/problem.php?id=3864 题意: 给你一个DNA序列,求有多少个长度为m的DNA序列和给定序列的LCS为0,1,2... ...

  2. hdu 3022 Sum of Digits

    http://acm.hdu.edu.cn/showproblem.php?pid=3022 题意: 最多不超过10000组数据,每组数据给定两个数n,m,求一个最小的数,使得该数每一位之和等于n,每 ...

  3. [转载] PNG优化插件:TinyPNG for Photoshop CC

    http://www.im286.com/thread-14922316-1-1.html http://www.tinypng.com的PS插件版,优化.无损压缩PNG,支持批量处理,据说只支持Ph ...

  4. Guava BiMap

    BiMap主要的就是用于key,value的互相映射,获取相互的结果,还保证值value是唯一的,key相同覆盖原来值. 举例: BiMap<Integer, String> empIDN ...

  5. Jquery常用方法合集,超实用

    转自:十分钟玩转 jQuery.实例大全 一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. ...

  6. xml json

    简单概括的话就是,xml本身是一种格式规范,是一种包含了数据以及数据说明的文本格式规范. 比如,我们要给对方传输一段数据,数据内容是“too young,too simple,sometimes na ...

  7. Ubuntu GNOME单击任务栏图标最小化设置

    在Ubuntu GNOME的发行版中,桌面使用的是GNOME,GNOME可以像Windows那样有一个底部任务栏,在Ubuntu GNOME中它称为 dash to dock,如下图: Windows ...

  8. C型USB能阻止危险充电器通过USB传播恶意软件

    C型USB能阻止危险充电器通过USB传播恶意软件 C型USB设备(USB Type-C)的新型身份验证协议可以保护用户免受潜在的充电器损坏的风险,这种新型的USB还能减少被恶意软件的风险.基于密码的认 ...

  9. Dream------Hadoop--网络拓扑与Hadoop--摘抄

    两个节点在一个本地网络中被称为“彼此的近邻”是什么意思?在高容量数据处理中,限制因素是我们在节点间 传送数据的速率-----带宽很稀缺.这个想法便是将两个节点间的带宽作为距离的衡量标准.   衡量节点 ...

  10. Socket心跳包机制【转】

    转自:https://blog.csdn.net/xuyuefei1988/article/details/8279812 心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己 ...