【NOIP2014】解方程(枚举)
题面
题目描述
已知多项式方程:
a0+a1x+a2x2+..+anxn=0
求这个方程在[1, m ] 内的整数解(n 和m 均为正整数)
输入格式
输入共n + 2 行。
第一行包含2 个整数n 、m ,每两个整数之间用一个空格隔开。
接下来的n+1 行每行包含一个整数,依次为a0,a1,a2..an
输出格式
输出文件名为equation .out 。
第一行输出方程在[1, m ] 内的整数解的个数。
接下来每行一个整数,按照从小到大的顺序依次输出方程在[1, m ] 内的一个整数解。
输入样例#1:
2 10
1
-2
1
输出样例#1:
1
1
输入样例#2:
2 10
2
-3
1
输出样例#2:
2
1
2
输入样例#3:
2 10
1
3
2
输出样例#3:
0
说明
对于30%的数据:0<n<=2,|ai|<=100,an!=0,m<100
对于50%的数据:0<n<=100,|ai|<=10^100,an!=0,m<100
对于70%的数据:0<n<=100,|ai|<=10^10000,an!=0,m<10000
对于100%的数据:0<n<=100,|ai|<=10^10000,an!=0,m<1000000
题解
明显对左右两侧取膜呀。。。。
如果f(x)%p=0
那么,肯定有f(x+kp)%p=0
所以,找几个质数,依次计算f(1~p)的值
如果某个整数是解
那么,必定有 f(x%pi)%pi=0
所以枚举一下就可以了。。。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MOD (19260817)
#define ll long long
inline int read()
{
register int x=0,t=1;
register char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-'){t=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=((x<<1)+(x<<3))%MOD+ch-48;ch=getchar();}
return x*t%MOD;
}
int N,M,a[3][110];
int A[110];
int tot;
char s[200][12000];
bool vis[1100000][5];
int pr[3]={10007,30071,12007};
inline bool f(int x,int tt)
{
ll ans=0;
for(int i=N;i>=0;--i)
ans=((ans+a[tt][i])*x)%pr[tt];
return !ans;
}
inline void geta(int tt)
{
for(int i=0;i<=N;++i)
{
int pos=0,z=1,l=strlen(s[i]);
if(s[i][pos]=='-'){z-=2;pos+=1;}
for(int j=pos;j<l;++j)
a[tt][i]=(a[tt][i]*10+s[i][j]-48)%pr[tt];
a[tt][i]*=z;
}
}
int main()
{
N=read();M=read();
for(int i=0;i<=N;++i)scanf("%s",s[i]);
for(int i=0;i<3;++i)geta(i);
for(int tt=0;tt<3;++tt)
for(int i=1;i<=min(M,pr[tt]);++i)
if(f(i,tt))
vis[i][tt]=true;
for(int i=1;i<=M;++i)
{
bool fl=true;
for(int tt=0;tt<3;++tt)fl&=vis[i%pr[tt]][tt];
if(fl)A[++tot]=i;
}
printf("%d\n",tot);
for(int i=1;i<=tot;++i)
printf("%d\n",A[i]);
return 0;
}
【NOIP2014】解方程(枚举)的更多相关文章
- 【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]解方程 数学
3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...
- bzoj 3751: [NOIP2014]解方程 同余系枚举
3.解方程(equation.cpp/c/pas)[问题描述]已知多项式方程:a ! + a ! x + a ! x ! + ⋯ + a ! x ! = 0求这个方程在[1, m]内的整数解(n 和 ...
- [NOIP2014]解方程
3732 解方程 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 输入描述 Input Descrip ...
- NOIP2014解方程
题目:求一个n次整系数方程在1-m内的整数解 n<=100 系数<=10000位 m<=100W 题解:最暴力的想法是枚举x,带入求值看是否为0. 这样涉及到高精度乘高精度,高精度 ...
- bzoj 3751: [NOIP2014]解方程
Description 已知多项式方程: a0+a1x+a2x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 解题报告: 这题比较诡,看到高精度做不了,就要想到 ...
- [BZOJ3751][NOIP2014] 解方程
Description 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). Input 第一行包含2个整数n.m,每两个 ...
- [BZOJ3751] [NOIP2014] 解方程 (数学)
Description 已知多项式方程:$a_0+a_1*x+a_2*x^2+...+a_n*x^n=0$ 求这个方程在[1,m]内的整数解(n和m均为正整数). Input 第一行包含2个整数n.m ...
- 【bzoj3751】[NOIP2014]解方程 数论
题目描述 已知多项式方程: a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 输入 第一行包含2个整数n.m,每两个整数之间用一个空格隔开 ...
随机推荐
- RTLabel 的简单使用
RTLabel 基于富文本的格式,适用于iOS,类似HTML的标记. RTLabel 基于UILabel类的拓展,能够支持Html标记的富文本显示,它是基于Core Text,因此也支持Core Te ...
- laravel框架学习-缓存,事件
缓存配置:app/config/cache.php 缓存: 增加缓存项: Cache::put( 'key', 'value', $Cachetime ); 在缓存中增加一个不存在 ...
- GCC精彩之旅_2(转)
说明: 本文共两篇,转自GCC精彩之旅.第一篇着重介绍GCC编译一个程序的过程与优化,第二篇侧重在GCC结合GDB对代码的调试. 调试 一个功能强大的调试器不仅为程序员提供了跟踪程序执行的手段 ...
- Linux服务器上安装MySql数据库(默认安装,密码为空),首次使用需要修改密码
1,在/etc/my.cnf末尾 加入skip-grant-tables,保存,跳过身份验证. 2,重启MySql,使刚才修改的配置生效. 3,终端输入mysql,然后再输入use mysql; 4 ...
- 浅谈 maxMemory , totalMemory , freeMemory 和 OOM 与 native Heap
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- POJ - 1062 昂贵的聘礼 Dijkstra
思路:构造最短路模型,抽象出来一个源点,这个源点到第i个点的费用就是price[i],然后就能抽象出图来,终点是1. 任意两个人之间都有等级限制,就枚举所有最低等级限制,然后将不再区间[min_lev ...
- 【Learning】 动态树分治
简介 动态树分治整体上由点分治发展而来. 点分治是统计树上路径,而动态树分治用来统计与点有关的树上路径,比如多次询问某一些点到询问点的距离和. 前置知识就是点分治. 做法 众所周知,点分树(点分治中重 ...
- 特殊权限SUIG、SGID、SBIT
一.SetUID与SGID 只能用于二进制程序 执行者需要有该二进制程序的x权限 执行具有SUID权限的二进制程序,那么执行者将具有该二进制程序所有者的权限. 举例来说,/etc/passwd文件的权 ...
- accordion 分类
<!--accordion--><h1>accordion 分类</h1><div id="accordionId" class=&quo ...
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...