P2312——解方程

解一元高次方程?emmm...当时不会,滚去学了一波秦九韶算法,然后开开心心写完,发现ai是10^1000,根本读不进来;然后不想写高精,(据说写高精会t)就直接交了一发,拿了50pts, 后来听说高精和我得的分一样,2333;

那正解是啥,取膜啊,我:???,取膜能对啊,这怎么可能对,然后我就去问ydn巨佬,他说如果hash对,这个就对。

行吧,然后就滚回来mod了1e9+7。

结果还是五十???机房某位大佬不屑的说,你读入的时候没取mod,只在运算时取有啥用。有理。

// luogu-judger-enable-o2
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define ri register int
#define int long long
#define max maxx
#define min minn
using namespace std;
const int N=1e6+10; 
const int mod=1e9+7;
template <class T> void in(T &x) {
    x = 0;
    bool f = 0;
    char c = getchar();
    while (c < '0' || c > '9') {
        if (c == '-') f = 1;
        c = getchar();
    }
    while ('0' <= c && c <= '9') {
        x =((x << 3) + (x << 1) + (c ^ 48))%mod;
        c = getchar();
    }
    if (f) x = -x;
}
inline int maxx(int x,int y) {
    return x>y?x:y;
}
inline int minn(int x,int y) {
    return x<y?x:y;
}
int a[N],ans[N];
int n,m,tot;
inline int solve(int now,int x)
{
    if(!now)
        return a[n-now]%mod;
    else 
        return (x*solve(now-1,x)+a[n-now])%mod; 
 } 
signed main()
{
    in(n),in(m);
    for(ri i=0;i<=n;++i)
        in(a[i]);
    for(ri i=1;i<=m;++i)
        if(solve(n,i)==0)
            ans[++tot]=i;
    printf("%lld\n",tot);
    for(ri i=1;i<=tot;++i)
        printf("%lld\n",ans[i]);
    return 0;
 } 

据某些巨佬说:这题有一个什么三模数的做法。

贴个链接:zzhbr——noip2014 解方程


发表于 2018-08-27 19:41:36 in 题目