제출 #1358078

#제출 시각아이디문제언어결과실행 시간메모리
1358078MrAndriaTrains (BOI24_trains)C++20
34 / 100
176 ms5752 KiB
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define int long long
int n,d[100005],x[100005],dp[100005],add[400][400],mod=1e9+7;
vector <int> vec[100005];
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n;
    int k=ceil(sqrt(n));
    for(int i=1;i<=n;i++){
        cin>>d[i]>>x[i];
    }
    int ans=0;
    dp[1]=1;
    for(int i=1;i<=n;i++){
        ans+=dp[i];
        ans%=mod;
        for(auto u:vec[i]){
            add[u%d[u]][d[u]]-=dp[u];
            add[u%d[u]][d[u]]%=mod;
            add[u%d[u]][d[u]]+=mod;
            add[u%d[u]][d[u]]%=mod;
        }
        if(d[i]!=0 and d[i]<=k){
            add[i%d[i]][d[i]]+=dp[i];
            add[i%d[i]][d[i]]%=mod;

            if(i+x[i]*d[i]<=n){
                vec[i+x[i]*d[i]].pb(i);
            }
        }
        for(int j=1;j<=min(k,n-i);j++){
            dp[i+j]+=add[i%j][j];
            dp[i+j]%=mod;
        }
        if(d[i]>k){
            for(int j=1;j<=x[i];j++){
                if(i+j*d[i]>n)break;
                dp[i+j*d[i]]+=dp[i];
                dp[i+j*d[i]]%=mod;
            }
        }
        
    }
    cout<<ans<<endl;

}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…