2017.4.25 解方程 思考记录
来源:互联网 发布:java if 缩写 编辑:程序博客网 时间:2024/06/14 06:14
这个题好乱啊、、n*m就会炸,每个数还都可能是10^10000、、这n*ai tm读进去都要10^6效率 、
一般这种似乎没有任何数论定理的东西范围还这么变态只能考虑随机化算法了。、
似乎可以用取模去试,但n*m还是没法优化、 除了50%的暴力点能跑一跑之外就只能弃疗了、
好吧,这个题需要两种取模,首先读入就要模,,这个模也就意味着你将要在模这个数的意义下找解、、那么找解就1到m枚举就好了。。。
同时可以优化(必须优化)即只需从1到模数 枚举就好了 ,因为p+1 和1 是一样的、、、
统计出在模这几个数之后的可行解之后,怎么在1到m找解?
然后还是枚举,从1到m 就只需看在模这几个数意义下 把枚举的数带入x 看是否成立即可,,所以在上面对模数找解的时候记录一下函数值即可。
其实就是试运气、、 一般这种范围爆炸的数据就考虑随机化好了、
注意:取模的循环性有可能成为优化的点,取模本身可以在一定程度上保留原数的相乘、相加特征、
另外 对一个数取多次模,每个模的合特征就更加接近原数、
码:
#include<iostream>#include<cstdio>using namespace std;#include<cstring>int mod[6]={9973,9931,9941,9949,9967};int len,n,i,j,m,zhe[20001][6],ans,shu,res[6][99999],t,cnt,daan[20001],lin[99999];bool lal;char ch[20009];int main(){scanf("%d%d",&n,&m);n++;for(i=1;i<=n;i++){scanf("%s",ch);len=strlen(ch); for(t=0;t<5;t++) {if(ch[0]=='-')shu=0,lal=1; else shu=ch[0]-'0',lal=0;for(j=1;j<len;j++){shu=(shu*10+(ch[j]-'0'))%mod[t]; } zhe[i][t]=shu;if(lal)zhe[i][t]=-shu; }}for(t=0;t<5;t++){for(i=1;i<mod[t];i++){lin[0]=1;for(j=1;j<=n;j++)lin[j]=(lin[j-1]*i)%mod[t];ans=0;for(j=1;j<=n;j++){ans=(ans+zhe[j][t]*lin[j-1]%mod[t])%mod[t];}res[t][i]=ans;}}for(i=1;i<=m;i++){lal=1;for(t=0;t<5;t++){if(res[t][i%mod[t]]!=0){lal=0;break;}}if(lal)daan[++cnt]=i;}printf("%d\n",cnt);for(i=1;i<=cnt;i++)printf("%d\n",daan[i]); }
0 0
- 2017.4.25 解方程 思考记录
- 2017.4.23 一元三次方程求解 思考记录
- 2017.4.1 kth_number 思考记录
- 2017.4.16 车站 思考记录
- 2017.4.16 麦森数 思考记录
- 2017.4.19 数列 思考记录
- 2017.4.19 细胞分裂 思考记录
- 2017.4.20 火星人 思考记录
- 2017.4.5 假期的宿舍 思考记录
- 2017.4.16 阶乘之和 思考记录
- 2017.4.16 幂次方 思考记录
- 2017.4.16 级数求和 思考记录
- 2017.4.19 多项式输出 思考记录
- 2017.4.20 比例简化 思考记录
- 2017.4.21 螺旋矩阵 思考记录
- 2017.4.21 2^k进制数 思考记录
- 2017.4.22 进制转换 思考记录
- 2017.4.26 组合数问题 思考记录
- How to install OpenCV
- vue环境搭建
- G Divideing Jewels(多重背包)
- Spring声明式事务处理
- 程序员成长必杀技,怎么找到想要的资源?
- 2017.4.25 解方程 思考记录
- IIC总线时序(结合AT24C02)
- java.lang.reflect.MalformedParameterizedTypeException
- struts2出现Error setting expression解决办法
- 文本分类的算法总结
- Linux 下安装 Redis 服务器
- java基础面试题
- 爬虫系列(三)HTTP库requests方式
- 设计模式-工厂方法模式