luogu 2312 解方程 乱搞+取模】的更多相关文章

思路非常好想,但是你很难想到去用这个算法,因为这个几乎就是个乱搞~ 我们发现多项式中每一个系数都很大,但是 $m$ 却很小,即最多只用 $10^6$ 个整数需要验证. 我们知道,如果一个数等于 $0$,那么这个数模任何一个数也都应该该等于 $0$ 所以可以直接取 $3$ 个左右的质数当模数,分别带值,取模,然后判一下等不等于 $0$. 当然,带值的部分可以用秦九昭算法,但是我感觉这只算是常数上的优化吧~ 只能在 luogu 上过,bz 上过不去~ 复杂度 $O(n\times m)$ #incl…
据大佬的说法这种大力乱搞题出在除NOIp以外的任何比赛都是很好的然而就是被出在了NOIp 首先对于想直接上高精的同学,我还是祝你好运吧. 我们考虑一个十分显然的性质,若\(a=b\),则对于任一自然数\(k\)都有\(a\ mod\ k=b\ mod\ k\) 所以我们考虑一下把这个等式转换成膜意义下的. 实际上就是对于那一个方程,我们取得一个值\(x\)时,计算其膜某个数的值,若为\(0\)则可以认定它有概率为正确的答案. 那么取什么值呢,根据正常人的经验,我们取一个大质数可以比较合理的保证均…
LINK 题意:求满足模p下$\frac{1}{a_i+a_j}\equiv\frac{1}{a_i}+\frac{1}{a_j}$的对数,其中$n,p(1\leq n\leq10^5,2\leq p\leq10^{18})$ 思路:推式子,两边同乘$(a_i + a_j)^3$,得$a_i^2+a_j^2 \equiv {a_i·a_j} \mod{p}$,进一步$a_i^2+a_j^2+a_i·a_j\equiv {0} \mod{p}$,然后?然后会点初中数竞,或者数感好会因式分解就能看出…
照例化简题意: 给定一个01区间,可以把0改成1,问其中最长的01数量相等的区间长度. 额很容易想到前缀和,把w弄成1,h弄成-1,然后求前缀和,然后乱搞就行了. 但是一直不太会乱搞的我却直接想到了二分. 很容易很容易想到:答案有单调性,也就是: 答案肯定是单调不增的 怎么理解呢? 就是:一定存在一个区间长度,使得其-1不是最大,+1不存在,这就是我们要找的东西 而check的思路也就很明确了: 枚举左端点,然后根据二分出的mid(区间假定长度)来找到一个最长区间,然后判断其中白牛的数量是否为非…
题目描述 已知方程∑i=0naixi=0\sum_{i=0}^{n}{a_ix^i}=0i=0∑n​ai​xi=0求该方程在 [1,m][1,m][1,m] 内的整数解. Solution 有一个秦九韶公式就是 a1x1+a2x2+...+anxn=x(a1+a2x1+a3x2+...+anxn−1)=x(a1+x(a2+a3x1+...+anxn−2))=...=x(a1+x(a2+x(a3+x(...).)))\begin{aligned}&\quad a_1x^1+a_2x^2+...+a…
题目:https://www.luogu.org/problemnew/show/P2312 https://www.lydsy.com/JudgeOnline/problem.php?id=3751 10^10000 太大了,高精度也很难做,怎么办? 注意我们要求的是方程的值 = 0 的解,不妨在取模意义下做,因为真正使方程 = 0 的解在模意义下也是 0: 然后可以用秦九韶算法,O(n) 算每个枚举的答案: 避免出错要多对几个数取模,就像哈希时有多个模数一样: 据说模数大小在 2e4 左右比…
$Luogu$ $Sol$ 枚举解+秦九韶公式计算+取模. $Code$ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define il inline #define Rg register #define go(i,a,b) for(Rg int i=a;i<=b;++i) #define yes(i,…
http://acm.hit.edu.cn/hoj/problem/view?id=3152 Dice My Tags (Edit) Source : Time limit : sec Memory limit : M Submitted : , Accepted : You have a dice with M faces, each face contains a distinct number. Your task is to calculate the expected number o…
思路: 系数的范围有$10^{10000}$,但是用高精度做显然不现实,因此可以考虑一个类似于“哈希”的做法, 对方程两边同时取模,如果取的模数足够多,正确率就很高了. 中间对多项式的计算可以使用$O(n)$的秦九韶算法. 然而,我的模数试了很多种都不能A,看了题解发现只要对$1000000007$一个数取模就AC了? #include<cstdio> #include<cctype> ; inline long long getll() { bool sgn=false; cha…
biubiu~~~ 我用平衡树处理的这道题,然而这种方法还是要看评测姬..... 正解是乱搞....就是枚举每一位数作为中位数,比他小的看做-1比他大的看做1,那么我们从一开始就有了一个绵延的山,我们记录这个数之前出现过的距水平线高度差,如果我们在右边找到了这个同样的距离就意味着我们中间的操作为0那么在这两个相同水平面之前的距离就是他作为中位数的一个区间. 似乎这是一种中位数套路........ #include <cstdio> namespace Pre{ inline void read…