Submission #249552

#TimeUsernameProblemLanguageResultExecution timeMemory
249552VEGAnnKlavir (COCI17_klavir)C++14
0 / 160
135 ms65540 KiB
#include <bits/stdc++.h> //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-O3") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("no-stack-protector") //#pragma GCC optimize("fast-math") #define all(x) x.begin(),x.end() #define sz(x) ((int)x.size()) using namespace std; typedef long long ll; const int M = 1000100; const int N = 110; const int md = int(1e9) + 7; int a[M], n, m, ans[M], pf[M], bb[M]; int aut[M][N]; int mult(int x, int y) { return (1ll * x * y) % md; } int sum(int x, int y){ x += y; if (x >= md) x -= md; return x; } int sub(int x, int y){ x -= y; if (x < 0) x += md; return x; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); #ifdef _LOCAL freopen("in.txt","r",stdin); #endif // _LOCAL cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> a[i]; bb[i - 1] = a[i]; } ans[0] = 0; pf[0] = 0; for (int i = 1; i < m; i++){ int j = pf[i - 1]; while (j > 0 && bb[i] != bb[j]) j = pf[j - 1]; if (bb[i] == bb[j]) j++; pf[i] = j; } aut[0][a[1]] = 1; for (int i = 1; i <= m; i++){ ans[i] = mult(sum(ans[i - 1], 1), n); int id = i - 1; for (int j = 1; j <= n; j++) if (j == bb[id]) aut[i][j] = id + 1; else aut[i][j] = aut[pf[i]][j]; for (int j = 1; j <= n; j++) if (a[i] != j){ int mx = aut[i][j]; ans[i] = sub(ans[i], ans[mx]); } cout << ans[i] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...