https://www.luogu.org/problem/show?pid=2312

对于30%的数据,n<=2,暴力带入试解。
对于50%的数据,ai很大,结合高精乘法和霍纳算法暴力代入试解。
高精乘法,时间复杂度是很恐怖的而且我不懂写。
注意到虽然ai很大,但是m还是在int范围内的。

继续考虑暴力试解。
考虑到0 mod k=0 (k∈N*),那么当f(x)=0时,f(x) mod k=0。
但是反过来f(x) mod k=0不一定使f(x)=0成立。当k|f(x)时,f(x) mod k=0也能成立。
为了尽可能避免这种情况,和hash一样,k取几个素数,只有膜这几个素数的时候f(x) mod k=0均成立,才判断f(x)=0成立。

在本题中,故

发现ai可以被膜掉,成功回避高精运算。
实际实现的时候可以写一个和快速读入一样的东西,一边读一边膜。也可以先以字符串的形式读进来,再计算成膜k的值。

然后发现xi也被膜掉,也就是说f(x) mod k=f(x+k) mod k。因此试解的时候只需要试[1,k)范围内的解。当然,k要取远比m小的数,这个优化才有意义。

模几个素数呢?模多大的素数呢?这是个非常看脸的问题。少了会WA,多了会TLE。
经过多次测试,模5个10000左右的素数是坠吼的。可是NOIP哪有机会多次测试

#include <algorithm>
#include <iostream>
#include <vector>
#include <cctype>
#include <cstring>
#define maxn 105
#define maxm 1000005
#define NUM_OF_PRIME 5
typedef long long llint;
using namespace std;
const llint prime[NUM_OF_PRIME] = {9859ll, 9631ll, 9059ll, 8783ll, 8291ll};
llint a[maxn][NUM_OF_PRIME]; //a[i][j] => i次项系数 % prime[j]
int n, m;
void geta(int i)
{
char c;
bool flag = false;
while (!isdigit(c = getchar()))
{
if (c == '-')
flag = true;
}
do
{
for (int k = ; k < NUM_OF_PRIME; k++)
a[i][k] = (a[i][k] * % prime[k] + c - '') % prime[k];
} while (isdigit(c = getchar()));
if (flag)
{
for (int k = ; k < NUM_OF_PRIME; k++)
a[i][k] = -a[i][k];
}
}
llint get_val(llint x, int k) // return f(x) mod k
{
llint val = ;
for (int i = n; i >= ; i--)
val = (val * x % prime[k] + a[i][k]) % prime[k];
return val;
}
bool isroot[maxm];
int main()
{
cin >> n >> m;
for (int i = ; i <= n; i++)
geta(i);
memset(isroot, true, m + );
for (int k = ; k < NUM_OF_PRIME; k++)
{
for (int i = ; i < min(prime[k], (llint)m + ); i++)
{
bool equalzero = get_val(i, k) == ;
for (int j = i; j <= m; j += prime[k])
isroot[j] &= equalzero;
}
}
vector<int> ans;
for (int i = ; i <= m; i++)
if (isroot[i])
ans.push_back(i);
cout << ans.size() << endl;
for (int i = ; i < ans.size(); i++)
cout << ans[i] << endl;
return ;
}

【NOIP2014提高组】解方程的更多相关文章

  1. [NOIp2014提高组]解方程

    思路: 系数的范围有$10^{10000}$,但是用高精度做显然不现实,因此可以考虑一个类似于“哈希”的做法, 对方程两边同时取模,如果取的模数足够多,正确率就很高了. 中间对多项式的计算可以使用$O ...

  2. NOIP2014提高组解方程

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

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

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

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

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

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

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

  6. NOIP2014提高组 酱油记

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

  7. noip2014 提高组

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

  8. NOIP2014提高组 题解报告

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

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

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

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

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

随机推荐

  1. Chartist.js-同时画柱状图和折线图

    最近几天都在研究chartist,因为echarts生成的图是位图,导成PDF的时候不够清晰.而chartist是搜到的免费插件中呼声较高的,基于SVG. 今天主要是想举一些代码例子给大家,介绍下如何 ...

  2. css 选择器和优先级

    css样式是做网页时,页面 布局不可或缺的关键点.但是在做网页时,会遇到一些明明已经设置了样式的元素,缺无法达到想要的效果,这种情况比较常见.这就涉及到优先级的问题了 要说到css的优先级,先来看下c ...

  3. Vim常用操作-Nginx配置文件批量加注释。

    刚接触 Vim 会觉得它的学习曲线非常陡峭,要记住很多命令.所以这个系列的分享,不会教你怎么配置它,而是教你怎么快速的使用它. 本期我们要实现给 Nginx 配置文件批量注释的功能,先来看效果: 操作 ...

  4. [转载] Solr使用入门指南

    转载自http://blog.csdn.net/liuzhenwen/article/details/4060922 由于搜索引擎功能在门户社区中对提高用户体验有着重要的作用,在门户社区中涉及大量需要 ...

  5. System.Transactions 事务超时属性

    最近遇到一个处理较多数据的大事务,当进行至10分钟左右时,爆出事务超时异常,如果Machine.config中不设置最大超时时间,则默认超时时间为10分钟 MachineSettingsSection ...

  6. javascript第七章--DOM

    ① 节点层次 ② DOM操作技术

  7. linux 安装nginx 详解

    1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没 ...

  8. SUCTF--WEB

    题目:flag 在哪? 介绍:网址(http://23.106.143.230/a_real_babyweb.php) 1,打开网址,抓包可以发现在 HTTP 头里面有 Cookie:suctf{Th ...

  9. sqli-libs

    这是抄袭你们  铃兰师姐总结的,尽管她很不情愿. (现在只是第八关,相信她会努力的,一定会做完,我也会随时在这个上面更新的,这个是在本地搭建的,想要这个的可以找你们铃兰师姐要啊!!!) less-1: ...

  10. [DFS遍历图]UVA10562 Undraw the Trees

    传送门: 1. UVA - 10562 2. Vjudge [看图写树]     将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...