Submission #853718

#TimeUsernameProblemLanguageResultExecution timeMemory
853718divadLucky Numbers (RMI19_lucky)C++14
28 / 100
1027 ms1360 KiB
#include <bits/stdc++.h> #define EQ 0 #define LE 1 using namespace std; const int MOD = 1e9+7; const int NMAX = 1e4+2; const int SIGMA = 10; int n,q,t,l,r,pos,val,dp[2][SIGMA][NMAX]; string str; int countWays(int st, int dr){ dp[EQ][0][0] = 1; for(int i = 1; i <= (dr-st+1); i++){ for(int state : {EQ, LE}){ for(int lst = 0; lst <= 9; lst++){ dp[state][lst][i] = 0; } } } for(int i = 1; i <= (dr-st+1); i++){ int pos = st+i-1; for(auto state : {EQ, LE}){ if(state == EQ){ for(int dig = 0; dig <= 9; dig++){ if(dig < str[pos]-'0'){ /// LE for(int lst = 0; lst <= 9; lst++){ if(lst == 1 && dig == 3){ continue; } dp[LE][dig][i] += dp[EQ][lst][i-1]; dp[LE][dig][i] %= MOD; } }else if(dig == str[pos]-'0'){ /// EQ for(int lst = 0; lst <= 9; lst++){ if(lst == 1 && dig == 3){ continue; } dp[EQ][dig][i] += dp[EQ][lst][i-1]; dp[EQ][dig][i] %= MOD; } } } }else{ for(int dig = 0; dig <= 9; dig++){ for(int lst = 0; lst <= 9; lst++){ if(lst == 1 && dig == 3){ continue; } dp[LE][dig][i] += dp[LE][lst][i-1]; dp[LE][dig][i] %= MOD; } } } } } int ans = 0; for(int i = 0; i <= 9; i++){ ans += dp[LE][i][(dr-st+1)] + dp[EQ][i][(dr-st+1)]; ans %= MOD; } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> q; cin >> str; str = "$"+str; cout << countWays(1, n) << "\n"; while(q--){ cin >> t; if(t == 1){ cin >> l >> r; cout << countWays(l, r) << "\n"; }else{ cin >> pos >> val; str[pos] = (val+'0'); } } 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...