Submission #1367268

#TimeUsernameProblemLanguageResultExecution timeMemory
1367268enzyTrains (BOI24_trains)C++20
21 / 100
2093 ms1224 KiB
#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int maxn=1e5+10;
const int sqt=1;
const int mod=1e9+7;
int v[maxn], qtd[sqt][sqt];
vector<pair<int,pii>>tira[maxn];
signed main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    int n, resp=0; cin >> n;
    v[1]=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<sqt;j++) v[i]=((v[i]+qtd[j][(i%j)])%mod);
        resp+=v[i]; resp%=mod;
        // cout << v[i] << ' ';
        for(pair<int,pii> p : tira[i]){
            qtd[p.se.fi][p.se.se]-=p.fi;
            qtd[p.se.fi][p.se.se]%=mod; qtd[p.se.fi][p.se.se]+=mod; qtd[p.se.fi][p.se.se]%=mod;
        }
        int x, d; cin >> d >> x;
        int fim=x*d+i;
        if(d==0) continue;
        if(d<sqt){
            qtd[d][(i%d)]+=v[i];
            if(fim<=n) tira[fim].push_back({v[i],{d,(i%d)}});
        }else{
            fim=min(fim,n);
            for(int j=i+d;j<=fim;j+=d) v[j]=((v[j]+v[i])%mod);
        }
    }
    // cout << '\n';
    cout << resp << '\n';
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...