bzoj 3751: [NOIP2014]解方程 同余系枚举
3.解方程
(equation.cpp/c/pas)
【问题描述】
已知多项式方程:
a ! + a ! x + a ! x ! + ⋯ + a ! x ! = 0
求这个方程在[1, m]内的整数解(n 和 m 均为正整数)。
【输入】
输入文件名为 equation.in。
输入共 n+2 行。
第一行包含 2 个整数 n、m,每两个整数之间用一个空格隔开。
接下来的 n+1 行每行包含一个整数,依次为a ! , a ! , a ! , ... , a ! 。
【输出】
输出文件名为 equation.out。
第一行输出方程在[1, m]内的整数解的个数。
接下来每行一个整数,按照从小到大的顺序依次输出方程在[1, m]内的一个整数解。
【输入输出样例 1】
equation.in equation.out
2 10 1
1 1
-2
1
【输入输出样例 2】
equation.in equation.out
2 10 2
2 1
-3 2
1
【输入输出样例 3】
equation.in equation.out
2 10 0
1
3
2
第 5 页共 6 页提高组 day2
全国信息学奥林匹克联赛(NOIP2014)复赛
【数据说明】
对于 30%的数据,0 < n ≤ 2, a ! ≤ 100,a ! ≠ 0, m ≤ 100;
对于 50%的数据,0 < n ≤ 100, a ! ≤ 10 !"" ,a ! ≠ 0,m ≤ 100;
对于 70%的数据,0 < n ≤ 100, a ! ≤ 10 !"""" ,a ! ≠ 0,m ≤ 10000;
对于 100%的数据,0 < n ≤ 100, a ! ≤ 10 !"""" ,a ! ≠ 0,m ≤ 1000000。
考场上想到了在同余系中枚举x,但是对于最后30%数据用的自然溢出,自然溢出很容易被卡掉。其实这种做法已经十分贴近正解了。观察发现,取质数p,对于解a,b,若a==b(mod p)那么他们带入算出的值一定相同,所以只用取多个较小p,预处理出[0,p-1]的值,在枚举[1,m]代入检验即可,bzoj数据很不良心啊,要么TLE,要么WA,jason_yu帮我检查了半天,才发现由于ans=(ans * i + a[ii][j])%pmod;我写成了{ans=(ans+x*a[j])%pmod;x=x*i%pmod;}常数过大,所以时限内尝试质数个数过少。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define PROB "equation"
#define MAXN 1100001
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
typedef long long qword;
const int mod[] =
{,,,,
};
int a[][];
bool ok[MAXN];
bool ok2[][];
char s[];
int n,m;
void work();
int main()
{
freopen(PROB".in","r",stdin);
freopen(PROB".out","w",stdout);
int ii,i,j, k;
int x;
scanf("%d%d\n",&n,&m);
int ll = ;
for (ii=;ii<=n;ii++)
{
// scanf("%s", s);
fgets(s,sizeof(s),stdin);
int l = strlen(s)-;
if((s[l-]<'' || s[l-]>'') && s[l-]!='-')l--;
for(int j = ; j < ll; j ++){
int pmod = mod[j];
a[j][ii] =;
x=;
k=;
if (s[k]=='-')k++,x=-x;
else if (s[k]=='+')k++;
for (;k<l;k++)
{
a[j][ii]=(a[j][ii]*+s[k]-'')%pmod; }
a[j][ii]=a[j][ii]*x%pmod;
if(a[j][ii] < )
a[j][ii] += pmod;
}
}
memset(ok,,sizeof(ok));
memset(ok2,,sizeof(ok2));
int pmod;
int ans;
for (ii=;ii<ll;ii++)
{
pmod=mod[ii];
for (i=;i<pmod;i++)
{
ans=;
for (j=n;j>=;j--)
{
ans=(ans * i + a[ii][j])%pmod;
}
if (ans)
{
ok2[ii][i]=false;
}
}
}
int cnt = ;
for (int i=;i<=m && cnt <= n;i++)
{
for (int j=;j<ll;j++)
{
if (!ok2[j][i%mod[j]]){
ok[i]=false;
break;
}
}
if(ok[i])
++ cnt;
}
printf("%d\n",cnt);
for (i=;i<=m;i++)
if (ok[i])
printf("%d\n",i);
return ;
}
bzoj 3751: [NOIP2014]解方程 同余系枚举的更多相关文章
- BZOJ 3751: [NOIP2014]解方程 数学
3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...
- bzoj 3751: [NOIP2014]解方程
Description 已知多项式方程: a0+a1x+a2x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 解题报告: 这题比较诡,看到高精度做不了,就要想到 ...
- bzoj 3751: [NOIP2014]解方程【数学】
--我真是太非了,自己搞了7个质数都WA,从别人那粘5个质数就A了-- 就是直接枚举解,用裴蜀定理计算是否符合要求,因为这里显然结果很大,所以我们对多个质数取模看最后是不是都为0 #include&l ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
- 【BZOJ】3751: [NOIP2014]解方程
题意 求\(\sum_{i=0}^{n} a_i x^i = 0\)在\([1, m]\)内的整数解.(\(0 < n \le 100, |a_i| \le 10^{10000}, a_n \n ...
- LOJ2503 NOIP2014 解方程 【HASH】
LOJ2503 NOIP2014 解方程 LINK 题目大意就是给你一个方程,让你求[1,m]中的解,其中系数非常大 看到是提高T3还是解方程就以为是神仙数学题 后来研究了一下高精之类的算法发现过不了 ...
- [NOIP2014]解方程
3732 解方程 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 输入描述 Input Descrip ...
- [BZOJ3751][NOIP2014] 解方程
Description 已知多项式方程:a0+a1*x+a2*x^2+...+an*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,每两个整数之间用一个空格隔开 ...
随机推荐
- java 递归函数
一.递归函数,通俗的说就是函数本身自己调用自己... 如:n!=n(n-1)! 你定义函数f(n)=nf(n-1) 而f(n-1)又是这个定义的函数..这就是递归 二.为什么要用递归:递归的目 ...
- 1032 - Intersecting Dates
A research group is developing a computer program that will fetch historical stock market quotes fro ...
- Show Global Status 整理
原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文链接http://www.cnblogs.com/lenag ...
- CGI与FastCGI 转
CGI与FastCGI 当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断 ...
- Cocos2d-x中获取设备语言的方法
1.cocos2dx获取设备语言的方法:CCApplication::sharedApplication()->getCurrentLanguage() 2.cocos2dx 2.1.4支持识别 ...
- register_globals(全局变量注册开关)
register_globals,是php.ini文件里面的一个配置选项,接下来,我们可以通过例程来分析一下,当register_globals = on 与 register_globals = o ...
- 浮动闭合方案:clearfix
1 ;clear:both;visibility:hidden} .clearfix{*+height:1%;} 2 .clearfix{overflow:auto;_height:1%} 3 ;}
- VC++ 响应回车键的2种方法
众所周知,VC++响应回车键经常用的方法是利用 BOOL PreTranslateMessage(MSG* pMsg) 截取回车键消息,如: if (pMsg->message == WM_KE ...
- Windows Server 2008 R2中关闭“IE增强的安全配置”
当在Windows Sever 2008 R2中运动IE8的时候会发现默认情况下IE启用了增强的安全配置,为了方便而且是在内网的情况下我们可以关闭IE8的增强安全配置,操作很简单如下步骤. 一,以本机 ...
- java.sql.Date to java.util.Date
发这篇博文的题目可能无法直接表示内容,但是确实是java.sql.Date和java.util.Date. 今天在使用'net.sf.json.JSONObject'封装json数据的时候,碰到很奇怪 ...