This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
int fx(int x){
if(x > MOD) x -= MOD;
return x;
}
void solve(){
int n, m;cin >> n >> m;
vector<int> rnsp[n], rpsn[n];
int ansp[n] = {0}, apsn[n] = {0};
int psn[n], nsp[n];
while(m--){
int a, b; cin >> a >> b;a--;b--;
if(a < b) {
ansp[a+1]++;
if(b+1 < n) rnsp[b+1].push_back(a);
} else {
swap(a,b);
apsn[a+1]++;
if(b+1 < n) rpsn[b+1].push_back(a);
}
}
multiset<int> spsn, snsp;
for(int i = 1;i < n;i++) {
while(ansp[i]--) snsp.insert(i-1);
while(apsn[i]--) spsn.insert(i-1);
for(int k : rnsp[i]) snsp.erase(snsp.find(k));
for(int k : rpsn[i]) spsn.erase(spsn.find(k));
psn[i] = spsn.empty() ? i : *spsn.rbegin();
nsp[i] = snsp.empty() ? i : *snsp.rbegin();
}
int dp[n+1][n+1][26];
for(int j = 0;j <= n;j++) for(int i = 0;i < 26;i++) dp[n][j][i] = 1;
for(int i = n-1;i;i--){
for(int j = 0;j < i;j++){
for(int k = 0;k < 26;k++){
dp[i][j][k]=0;
for(int l = psn[i] >= j && psn[i] <= i-1 ? k : 0;l < (nsp[i] >= j && nsp[i] <= i-1 ? k+1 : 26);l++){
dp[i][j][k] = fx(dp[i][j][k] + dp[i+1][l == k ? j : i][l]);
}
}
}
}
int ans = 0;
for(int i = 0;i < 26;i++) ans = fx(ans+dp[1][0][i]);
cout <<ans << '\n';
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |