NOIP 2014 D2T3 解方程 Hash大法好】的更多相关文章

题目大意:给定高次方程an*x^n+...+a1*x^1+a0*x^0=0 求[1,m]区间内有多少个整数根 ai<=10^10000.m<=100W 懒得高精,考场上写的long double乱搞--30分打底50分顶天QAQ 当我最终搞定了各种非官方数据之后,我仅仅能长跪大地.手捧鲜花.仰望上苍高喊:哈希大法好! 首先阿贝尔在200年前告诉我们 五次以上方程没有求根公式 于是我们仅仅能枚举1~m 这个是100W 然后100W再加上1W位的精度 都不用运算直接就是跪-- 怎么办呢QAQ 哈希…
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .in. 输入共n + 2 行. 第一行包含2 个整数n .m ,每两个整数之间用一个空格隔开. 接下来的n+1 行每行包含一个整数,依次为a0,a1,a2..an 输出格式: 输出文件名为equation .out . 第一行输出方程在[1, m ] 内的整数解的个数. 接下来每行一个整数,按照从小到…
http://uoj.ac/problem/20 并不会做...然后看题解....... 对a取模,避免了高精度带来的复杂度,然后再枚举x判断是否满足模意义下等于0. 取5个模数,我直接抄的别人的_(┐「ε:)_.时间复杂度$O(nm)$. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int p[5] = {11261,19997,22877,2189…
题目描述 已知多项式方程: a0+a1x+a2x2+⋯+anxn=0 求这个方程在 [1,m]内的整数解(n 和 m 均为正整数). 输入输出格式 输入格式: 共 n+2 行. 第一行包含 2个整数 n,m,每两个整数之间用一个空格隔开. 接下来的 n+1n+1n+1 行每行包含一个整数,依次为 a0,a1,a2…an 输出格式: 第一行输出方程在 [1,m] 内的整数解的个数. 接下来每行一个整数,按照从小到大的顺序依次输出方程在 [1,m]内的一个整数解. 思路: 有一个奇妙的东西叫秦九韶算…
LOJ2503 NOIP2014 解方程 LINK 题目大意就是给你一个方程,让你求[1,m]中的解,其中系数非常大 看到是提高T3还是解方程就以为是神仙数学题 后来研究了一下高精之类的算法发现过不了多少分 后面佬说这题是hash 然后就雾 考虑对于一个式子f(x)=0肯定会满足f(x)%prime=0 所以我们直接多取几个相近的prime,减小冲突几率 然后我们只需要预处理每个系数对于每个prime的模数,然后判断一下就可以了 但是这样会TLE 又可以发现对于任意的f(x)%prime=0,等…
luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实不好做想不到. 由于\(a\)非常大.转为以下思路. 设 \(f(x) = a_0+a_1x+a_2x^2+\cdots+a_nx^n\) 对于\(f(x) = 0\)则\(f(x)\%p = 0\) \(f(x \% p) = 0\) 然后这里最好是选择素数.由于luogu数据较水,可以直接选择\…
背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已知多项式方程: $$a_0+a_1x+a_2x^2+...+a_nx^n=0$$ 求这个方程在[1, m]内的整数解(n 和 m 均为正整数). 输入格式 输入共 n+2 行. 第一行包含 2 个整数 n.m,每两个整数之间用一个空格隔开. 接下来的 n+1 行每行包含一个整数,依次为$a_0,a_…
3732 解方程  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 输入描述 Input Description 输入文件名为equation.in. 输入共n+2行. 第一行包含2个整数n.m,每两个整数之间用一个空格隔开. 接下来的n+1行每行包含一个整数,依次为a0,a1,a2,……,an. 输出描述 Output Description 输出文件名为equation.out. 第一行输出方程在…
题目 首先,可以确定的是这题的做法就是暴力枚举x,然后去计算方程左边与右边是否相等. 但是noip的D2T3怎么会真的这么简单呢?卡常卡的真是熟练 你需要一些优化方法. 首先可以用秦九韶公式优化一下方程左边的计算方法: 左边=(((..(a[n]*x)+a[n-1])*x+..+a[1])*x+a[0] 然后我就试着直接去算: #include<cstdio> typedef long long LL; LL a[110],ans[1001000]; LL n,m,aa; int main()…
内容参考<算法竞赛进阶指南> 之前集训的时候听老师讲过,字符串题目中,hash一般不是正解,但是是一个优秀的暴力,可以拿比较多的部分分. hash涉及内容很多,这里只讨论字符串hash 可以把字符串看成一个131进制位数,然后用ull储存,大过2的64次方后自动取模. 这样的话hash值相等的话可以认为两个字符串是一样的(极少概率不一样) 所以对于一个字符串,我们可以用O(n)的时间内算出所有前缀的hash值,然后就可以用 O(1)的时间算出任意一段区间的hash值(类比二进制操作,具体看代码…