제출 #927714

#제출 시각아이디문제언어결과실행 시간메모리
927714andrei_boacaMisspelling (JOI22_misspelling)C++17
8 / 100
4035 ms163052 KiB
#include <bits/stdc++.h> using namespace std; const int mod=1e9+7; int n,m; int lastmare[500005],lastmic[500005]; int dp[3][27][500005]; /// 0 -> egal, 1 -> mai mic, 2 -> mai mare int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i=1;i<=m;i++) { int a,b; cin>>a>>b; if(a<b) lastmic[a]=max(lastmic[a],b); if(a>b) lastmare[b]=max(lastmare[b],a); } for(int i=1;i<=26;i++) dp[2][i][1]=1; for(int i=2;i<=n;i++) { int pmare=i,pmic=i; /// mai mare for(int j=i-1;j>=1;j--) { if(lastmic[j]>=i) break; pmare=j; } /// mai mic for(int j=i-1;j>=1;j--) { if(lastmare[j]>=i) break; pmic=j; } for(int c=1;c<=26;c++) { dp[0][c][i]=(1LL*(dp[0][c][i-1]+dp[1][c][i-1]+dp[2][c][i-1]))%mod; for(int j=i-1;j>=pmic;j--) for(int prv=1;prv<c;prv++) { int val=(dp[1][prv][j]+dp[2][prv][j])%mod; dp[1][c][i]=(dp[1][c][i]+val)%mod; } for(int j=i-1;j>=pmare;j--) for(int prv=c+1;prv<=26;prv++) { int val=(dp[1][prv][j]+dp[2][prv][j])%mod; dp[2][c][i]=(dp[2][c][i]+val)%mod; } } } int ans=0; for(int c=1;c<=26;c++) { ans=(ans+dp[0][c][n])%mod; ans=(ans+dp[1][c][n])%mod; ans=(ans+dp[2][c][n])%mod; } cout<<ans; 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...