제출 #936552

#제출 시각아이디문제언어결과실행 시간메모리
936552TAhmed33Misspelling (JOI22_misspelling)C++98
0 / 100
12 ms76636 KiB
#include <bits/stdc++.h> using namespace std; const int MOD = 1e9 + 7; int add (int a, int b) { a += b; if (a >= MOD) a -= MOD; return a; } int sub (int a, int b) { a -= b; if (a < 0) a += MOD; return a; } int mul (int a, int b) { return (a * 1ll * b) % MOD; } const int MAXN = 5e5 + 25; int dp[MAXN][27]; int n, m; vector <int> type1[MAXN]; vector <int> type2[MAXN]; int ans (int pos, int c) { int &ret = dp[pos][c]; if (ret != -1) return ret; if (pos == 1) return ret = 1; ret = 0; for (int j = 0; j < c; j++) { bool flag = 1; for (int i = pos - 1; i >= 1; i--) { for (auto k : type2[i - 1]) { flag &= (pos > k); } if (flag) ret = add(ret, ans(i, j)); } } for (int j = c + 1; j < 26; j++) { bool flag = 1; for (int i = pos - 1; i >= 1; i--) { for (auto k : type2[i - 1]) { flag &= (pos > k); } if (flag) ret = add(ret, ans(i, j)); } } return ret; } int main () { memset(dp, -1, sizeof(dp)); cin >> n >> m; for (int i = 1; i <= m; i++) { int a, b; cin >> a >> b; int l = min(a, b), r = max(a, b); if (a > b) { type1[l - 1].push_back(r); } else { type2[l - 1].push_back(r); } } int sum = 0; for (int i = 0; i < 26; i++) { for (int j = 1; j <= n; j++) { sum = add(sum, ans(j, i)); } } cout << sum << '\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...