Submission #1264842

#TimeUsernameProblemLanguageResultExecution timeMemory
1264842ivopavTrains (BOI24_trains)C++20
100 / 100
419 ms319492 KiB
#include <bits/stdc++.h>
using namespace std;

using i64=long long int;

int main(){
    i64 kor=400;
    i64 mod=1e9+7;
    i64 n;
    cin >> n;
    vector<i64> comb(n,0);
    vector<vector<i64>> kolzbr(kor,vector<i64>(kor,0)); 
    vector<vector<i64>> kolzbrmak(n,vector<i64>(kor,0)); 
    i64 rje=0;
    comb[0]=1;
    for (i64 i=0;i<n;i++){
        i64 unos;
        i64 unos2;
        cin >> unos >> unos2;
        //cout << "a\n";

        for (i64 j=1;j<kor;j++){
            i64 pom=i%j;
          //  cout << i << " " << j << " " << pom << "\n";
           // cout << kolzbr[j][pom] << " " << kolzbrmak[i][j] << "\n";
            comb[i]+=kolzbr[j][pom];
            comb[i]%=mod;
            kolzbr[j][pom]+=kolzbrmak[i][j];
            kolzbr[j][pom]%=mod;
            
            
        }
        //cout << "b\n";
        if (unos*unos2==0){
     //       cout << comb[i] << "\n";
            rje+=comb[i];
            rje%=mod;
            continue;
        }
        if (unos>=kor){
            i64 kol=0;
            for (i64 j=i+unos;j<n && kol<unos2;j+=unos,kol++){
             //   cout << i << " " << j << "-=-\n";
                comb[j]+=comb[i];
                comb[j]%=mod;
            }
        }
        else {
            i64 indkra=i+unos*unos2;
            if (indkra<n){
                kolzbrmak[indkra][unos]-=comb[i];
                kolzbrmak[indkra][unos]+=mod;
                kolzbrmak[indkra][unos]%=mod;
                
                
            }
            kolzbr[unos][i%unos]+=comb[i];
            kolzbr[unos][i%unos]%=mod;
        }
        //cout << "c\n";
      //  cout << comb[i] << "\n";
        rje+=comb[i]; 
        rje%=mod;
    }
    cout << rje << "\n";

}
#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...