Submission #258657

#TimeUsernameProblemLanguageResultExecution timeMemory
258657dantoh000Lucky Numbers (RMI19_lucky)C++14
100 / 100
29 ms8832 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1000000007;
ll mem[100005][2];
int a[100005];
int n,q;
ll dp(int id, int lastone){
    if (id == 0) return 1;
    if (mem[id][lastone] != -1) return mem[id][lastone];
    ll ret = 0;
    for (int i = 0; i < 10; i++){
        if (lastone && i == 3) continue;
        ret += dp(id-1,i==1);
    }
    ret %= mod;
    //printf("%d %d %lld\n",id,lastone,ret);
    return mem[id][lastone] = ret;
}
ll qu(int l, int r){
    ll ret = 0;
    int ct = r-l;
    bool isthirteenalready = false;
    for (int i = l; i <= r && !isthirteenalready; i++, ct--){
        int num = a[i]-(i!=l && a[i-1]==1 && a[i]>3);
        int numone = (a[i]>1);
        if (numone) ret += dp(ct,1);
        ret += (num-numone)*dp(ct,0);
        if (i != l && a[i-1] == 1 && a[i] == 3) isthirteenalready = true;
    }
    if (!isthirteenalready) ret++;
    ret %= mod;
    return ret;
}
int main(){
    scanf("%d%d",&n,&q);
    for (int i = 0; i < n; i++){
        char ch;
        scanf(" %c",&ch);
        a[i] = ch-'0';
    }
    memset(mem,-1,sizeof(mem));
    printf("%lld\n",qu(0,n-1));
    for (int i = 0; i < q; i++){
        int t,l,r;
        scanf("%d%d%d",&t,&l,&r);
        if (t == 1){
            printf("%lld\n",qu(--l,--r));
        }
        else{
            a[--l] = r;
        }
    }
}

Compilation message (stderr)

lucky.cpp: In function 'int main()':
lucky.cpp:36:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&q);
     ~~~~~^~~~~~~~~~~~~~
lucky.cpp:39:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf(" %c",&ch);
         ~~~~~^~~~~~~~~~~
lucky.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d",&t,&l,&r);
         ~~~~~^~~~~~~~~~~~~~~~~~~
#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...