NOIP2014 解方程
还有这种操作?
我看到这道题的时候想到暴力枚举,不过a的范围极大令人头疼。Ssy说他要用Python然后他T了
不过后来发现,因为我们要解的方程左边是等于0的,所以我们可以直接把所有的a对于某一个数取模,这个在读入的时候就能处理,之后直接暴力枚举m用秦九韶算法硬算即可。
这都是什么神仙操作
看一下代码。
// luogu-judger-enable-o2 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> #include<set> #include<queue> #define rep(i,a,n) for(int i = a;i <= n;i++) #define per(i,n,a) for(int i = n;i >= a;i--) #define enter putchar('\n') using namespace std; typedef long long ll; const int M = 1000005; const ll INF = 1e17+9; const ll mod = 19260817; ll read() { ll ans = 0,op = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') op = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { ans *= 10; ans += ch - '0'; ans %= mod; ch = getchar(); } return ans * op; } ll n,m,a[105],cnt,ans[M]; ll calc(ll x) { ll ans = 0; per(i,n,0) ans *= x,ans += a[i],ans %= mod; return ans; } int main() { n = read(),m = read(); rep(i,0,n) a[i] = read(); rep(i,1,m) { ll k = calc(i); if(k == 0) ans[++cnt] = i; } printf("%lld\n",cnt); rep(i,1,cnt) printf("%lld\n",ans[i]); return 0; }
当你意识到,每个上一秒都成为永恒。