제출 #1147969

#제출 시각아이디문제언어결과실행 시간메모리
1147969tianyaochiunTrains (BOI24_trains)C++20
71 / 100
2090 ms329496 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,unroll-loops") #pragma GCC optimize("Ofast") #define ll long long #define pii pair<int,int> #define piii pair<pii,int> #define F first #define S second #define pb push_back #define eb emplace_back #define endl "\n" #define all(a) a.begin(),a.end() //#define int long long const int mod=1e9+7; void solve(){ int n,ans=0; cin>>n; int d[n],x[n]; vector<pii> idx[n]; map<pii,vector<int>> mp; for(int i=0;i<n;++i) cin>>d[i]>>x[i]; for(int i=0;i<n;++i){ int tmp=0; for(auto[m,r]:idx[i]){ int id=i/m; auto &it=mp[{m,r}]; if(id) (it[id]+=it[id-1])%=mod; (tmp+=it[id])%=mod; } if(!i) tmp=1; (ans+=tmp)%=mod; if(i+d[i]>=n||d[i]==0||x[i]==0) continue; int k=i%d[i]; auto &it=mp[{d[i],k}]; if(it.empty()){ for(int j=k;j<n;j+=d[i]){ it.pb(0); idx[j].eb(d[i],k); } } int id=i/d[i]; (it[id+1]+=tmp)%=mod; if(id+x[i]+1<it.size()){ it[id+x[i]+1]-=tmp; if(it[id+x[i]+1]<0) it[id+x[i]+1]+=mod; } } cout<<ans; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t=1; //cin>>t; while(t--){ solve(); } return 0; }
#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...