Submission #726994

#TimeUsernameProblemLanguageResultExecution timeMemory
726994dozerMisspelling (JOI22_misspelling)C++14
100 / 100
534 ms160408 KiB
#include <bits/stdc++.h> using namespace std; #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define sp " " #define endl "\n" #define pb push_back #define pii pair<int, int> #define st first #define nd second #define N 500005 #define A 30 #define int long long const int modulo = 1e9 + 7; int range[2][N]; int dp[N][A], v[2][N]; int add(int a, int b) { if (a + b < modulo) return a + b; return a + b - modulo; } int mul(int a, int b) { return (a * b) % modulo; } int subs(int a, int b) { if (a < b) return a - b + modulo; return a - b; } int32_t main() { fastio(); int n, m; cin>>n>>m; for (int i = 1; i <= m; i++) { int a, b; cin>>a>>b; if (a > b) range[1][b + 1] = max(range[1][b + 1], a); else range[0][a + 1] = max(range[0][a + 1], b); } set<int> undone[2]; vector<int> pre(A, 0), suf(A, 0); for (int i = n; i >= 1; i--) { for (int j = 1; j <= 26; j++) { dp[i][j] = add(pre[j - 1], suf[j + 1]); dp[i][j] = add(dp[i][j], 1); } for (int j = 0; j < 2; j++) { undone[j].insert(i); for (int k = 1; k <= 26; k++) v[j][k] = add(v[j][k], dp[i][k]); auto it = undone[j].begin(); while(it != undone[j].end() && *it <= range[j ^ 1][i]) { for (int k = 1; k <= 26; k++) v[j][k] = subs(v[j][k], dp[*it][k]); it = undone[j].erase(it); } } for (int j = 1; j <= 26; j++) pre[j] = add(pre[j - 1], v[1][j]); for (int j = 26; j >= 1; j--) suf[j] = add(suf[j + 1], v[0][j]); } int ans = 0; for (int i = 0; i < 2; i++) { for (auto j : undone[i]) { if (j == 1) continue; for (int k = 1; k <= 26; k++) { if (i == 0) ans = add(ans, mul(k - 1, dp[j][k])); else ans = add(ans, mul(26 - k, dp[j][k])); } } } ans = add(ans, 26); assert((ans % modulo + modulo) % modulo == ans); cout<<ans<<endl; cerr<<"time taken : "<<(float)clock() / CLOCKS_PER_SEC<<" seconds\n"; }
#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...