제출 #1051525

#제출 시각아이디문제언어결과실행 시간메모리
1051525MalixTrains (BOI24_trains)C++14
34 / 100
203 ms504516 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; int n; vector<ll> dp; vi d,x; int m; int dd=1e5; int main() { // ios::sync_with_stdio(0); // cin.tie(0); cin>>n; d.resize(n);x.resize(n); REP(i,0,n)cin>>d[i]>>x[i]; m=sqrt(n)+1; ll ans=0; vector<ll> val(n,0); val[0]=1; vector<vector<ll>> arr(n,vector<ll>(m,0)); vector<vector<ll>> arr2(n,vector<ll>(m,0)); REP(i,0,n){ REP(j,1,m){ if(arr[i][j]==0)continue; val[i]+=arr[i][j]; val[i]%=M; if(i+j<n)arr[i+j][j]=(arr[i][j]-arr2[i][j]+M)%M; } if(d[i]==0)continue; if(d[i]<m){ if(i+d[i]<n){ arr[i+d[i]][d[i]]+=val[i]; arr[i+d[i]][d[i]]%=M; } ll k=(ll)i+(ll)d[i]*(ll)x[i]; if(k<(ll)n){ arr2[i+d[i]*x[i]][d[i]]+=val[i]; arr2[i+d[i]*x[i]][d[i]]%=M; } } else{ REP(j,1,x[i]+1){ if(i+d[i]*j>=n)break; val[i+d[i]*j]+=val[i]; val[i+d[i]*j]%=M; } } } REP(i,0,n){ ans+=val[i]; ans%=M; } cout<<(ans+M)%M; }
#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...