NOIP2014 D2T3 解方程 BZOJ3751 UOJ20 数论 秦九韶算法 玄学
来源:互联网 发布:国内云计算市场份额 编辑:程序博客网 时间:2024/06/05 04:55
大家都很强, 可与之共勉 。
话说这是一道简单爆了的难题。
【NOIP2014】解方程
已知多项式方程:
求这个方程在
输入格式
第一行包含
接下来的
输出格式
第一行输出方程在
接下来每行一个整数,按照从小到大的顺序依次输出方程在
样例一
input
2 101-21
output
11
样例二
input
2 102-31
output
212
样例三
input
2 10132
output
0
限制与约定
对于30%的数据,
对于50%的数据,
对于70%的数据,
对于100%的数据,
时间限制:
内存限制:
先补充一个知识——秦九韶算法
目的是简化多项式运算
一般地,一元n次多项式的求值需要经过2n-1次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。
inline int F ( int* a, int x ) { int rt = 0 ; for ( int i = n ; ~ i ; -- i ) rt = 1LL * rt * x + a [i] ; return rt ; }
如此一来就不用预处理x的次幂是多少,在这一题里会异常方便。
接下来我们来说这道题
显然,若f(x)=0,则f(x)≡f(x0)≡0(mod p),其中x≡x0(0<=x0 < p)。那么如果f(x0)≡0(mod p),那么基本可以确定f(x)=0。当然如果不用p取模的话输入早就爆掉了。。那么如果p比较大的话,比如>m,那么取一个质数,基本上出错概率就很小了。
然后我们对系数取模计算的时候取模,若一个数是解,那么它在所有的质数里面的结果(取了模)都应该是0。
详见代码:
UOJ AC 了 BZOJ A不掉mmp
拿UOJ代码交又是OLE又是WA
UOJ AC
开始质数取大了T掉了两个点
# include <bits/stdc++.h>//const int P1 = 999983, P2 = 882017, P3 = 692009 ;const int P1 = 11261, P2 = 14843, P3 = 19997 ;const int N = 105 ;int n, m ;int cnt, Ans [1000005] ;int a1 [N], a2 [N], a3 [N], ans1 [P1], ans2 [P2], ans3 [P3] ;inline void ReadOpt ( int k ) { static char ss [10005] ; bool Nagative ( false ) ; scanf ( "%s", ss ) ; register char* pt = ss ; if ( *ss == '-' ) { Nagative = true ; pt = ss + 1 ; } while ( *pt ) { a1 [k] = ( 10 * a1 [k] + *pt - 48 ) % P1 ; a2 [k] = ( 10 * a2 [k] + *pt - 48 ) % P2 ; a3 [k] = ( 10 * a3 [k] + *pt - 48 ) % P3 ; ++ pt ; } if ( Nagative ) { a1 [k] = ( P1 - a1 [k] ) ; a2 [k] = ( P2 - a2 [k] ) ; a3 [k] = ( P3 - a3 [k] ) ; }}inline int Cal ( int* Opt, int x, int P ) { int rt = 0 ; for ( int i = n ; ~ i ; -- i ) rt = ( 1LL * rt * x + Opt [i] ) % P ; return rt ; }int main ( ) { scanf ( "%d%d", & n, & m ) ; for ( int i = 0 ; i <= n ; ++ i ) ReadOpt ( i ) ; for ( int i = 0 ; i < P1 ; ++ i ) ans1 [i] = Cal ( a1, i, P1 ) ; for ( int i = 0 ; i < P2 ; ++ i ) ans2 [i] = Cal ( a2, i, P2 ) ; for ( int i = 0 ; i < P3 ; ++ i ) ans3 [i] = Cal ( a3, i, P3 ) ; for ( register int i = 1 ; i <= m ; ++ i ) { if ( ans1 [i % P1] || ans2 [i % P2] || ans3 [i % P3] ) continue ; Ans [++ cnt] = i ; } printf ( "%d\n", cnt ) ; for ( int i = 1 ; i <= cnt ; ++ i ) printf ( "%d\n", Ans [i] ) ; return 0 ;}
BZOJ AC
# include <bits/stdc++.h>const int P1 = 11261, P2 = 14843, P3 = 19997, P4 = 21893, P5 = 22877 ;const int N = 105 ;int n, m ;int cnt, Ans [1000005] ;int a1 [N], a2 [N], a3 [N], a4 [N], a5 [N], ans1 [P1], ans2 [P2], ans3 [P3], ans4 [P4], ans5 [P5] ;inline void ReadOpt ( int k ) { static char ss [10005] ; bool Nagative ( false ) ; scanf ( "%s", ss ) ; register char* pt = ss ; if ( *ss == '-' ) { Nagative = true ; pt = ss + 1 ; } while ( *pt ) { a1 [k] = ( 10 * a1 [k] + *pt - 48 ) % P1 ; a2 [k] = ( 10 * a2 [k] + *pt - 48 ) % P2 ; a3 [k] = ( 10 * a3 [k] + *pt - 48 ) % P3 ; a4 [k] = ( 10 * a4 [k] + *pt - 48 ) % P4 ; a5 [k] = ( 10 * a5 [k] + *pt - 48 ) % P5 ; ++ pt ; } if ( Nagative ) { a1 [k] = ( P1 - a1 [k] ) ; a2 [k] = ( P2 - a2 [k] ) ; a3 [k] = ( P3 - a3 [k] ) ; a4 [k] = ( P4 - a4 [k] ) ; a5 [k] = ( P5 - a5 [k] ) ; }}inline int Cal ( int* Opt, int x, int P ) { int rt = 0 ; for ( int i = n ; ~ i ; -- i ) rt = ( 1LL * rt * x + Opt [i] ) % P ; return rt ; }int main ( ) { scanf ( "%d%d", & n, & m ) ; for ( int i = 0 ; i <= n ; ++ i ) ReadOpt ( i ) ; for ( int i = 0 ; i < P1 ; ++ i ) ans1 [i] = Cal ( a1, i, P1 ) ; for ( int i = 0 ; i < P2 ; ++ i ) ans2 [i] = Cal ( a2, i, P2 ) ; for ( int i = 0 ; i < P3 ; ++ i ) ans3 [i] = Cal ( a3, i, P3 ) ; for ( int i = 0 ; i < P4 ; ++ i ) ans4 [i] = Cal ( a4, i, P4 ) ; for ( int i = 0 ; i < P5 ; ++ i ) ans5 [i] = Cal ( a5, i, P5 ) ; for ( register int i = 1 ; i <= m ; ++ i ) { if ( ans1 [i % P1] || ans2 [i % P2] || ans3 [i % P3] || ans4 [i % P4] || ans5 [i % P5] ) continue ; Ans [++ cnt] = i ; } printf ( "%d\n", cnt ) ; for ( int i = 1 ; i <= cnt ; ++ i ) printf ( "%d\n", Ans [i] ) ; return 0 ;}
- NOIP2014 D2T3 解方程 BZOJ3751 UOJ20 数论 秦九韶算法 玄学
- 【数论】[NOIP2014]bzoj3751 codevs3732 解方程
- [BZOJ3751][NOIP2014]解方程
- BZOJ3751: [NOIP2014]解方程
- 【NOIP2014】D2T3 解方程 equation
- NOIP2014 bzoj3751 Day2T3 解方程 数学&hash
- 【bzoj3751】【洛谷P2312】【NOIP2014】解方程
- [BZOJ3751][NOIP2014][数学][乱搞]解方程
- [BZOJ3751][NOIP2014]解方程(乱搞)
- 【codevs3732】【BZOJ3751】解方程,hash+秦九韶算法
- 洛谷 P2312 [NOIP2014 D2T3] 解方程
- 【NOIP2014】解方程 玄学哈希+乱搞
- [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)
- 【乱搞】BZOJ3751(UOJ#20)[NOIP2014]解方程
- NOIP2014 lgP2312 解方程(秦九韶算法+hash)
- bzoj 3751: [NOIP2014]解方程 (数论)
- LuoguP2312[NOIP2014] 解方程 解题报告【秦九韶算法】
- Noip2014 Day2 T3 解方程(数论+取模运算)
- JVM结构、GC工作机制详解
- mysql联合索引
- OpenGL学习笔记之绘制图元
- 【Gym
- 洛谷 P2184 贪婪大陆( 树状数组的活用 )
- NOIP2014 D2T3 解方程 BZOJ3751 UOJ20 数论 秦九韶算法 玄学
- 溢出覆盖返回地址实现攻击
- 【学生】知识总结
- (十二)命令模式详解(故事版)
- HNCPC 2016 湖南省程序设计竞赛 有向无环图
- 机器学习入门笔记(三)----Octave简单使用
- 几种排序以及其时间复杂度
- 数据结构与算法_KMP算法
- 字符设备驱动