이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
const int MAX_N = 1e5 + 10;
const int MOD = 1e9+7;
const int K = 300;
int N;
int d[MAX_N];
int x[MAX_N];
int dp[MAX_N];
int sufs[K][K];
vector<unordered_map<int, int>> req;
signed main(){
cin>>N;
req.resize(N+1);
for(int i = 0; i<N; i++){
cin>>d[i]>>x[i];
req[i][d[i]] = -1;
req[min(N, i+d[i]*x[i])][d[i]] = -1;
}
for(auto it = req[N].begin(); it!=req[N].end(); ++it){
it->second = 0;
}
fill(&sufs[0][0], &sufs[K-1][K], 0LL);
for(int i = N-1; i>=0; i--){
for(auto it = req[i].begin(); it!=req[i].end(); ++it){
int cur_d = it->first;
int res = 0;
if(cur_d!=0){
if(cur_d<K){
res = (res + sufs[cur_d][i%cur_d])%MOD;
}
else{
for(int j = i+cur_d; j<N; j+=cur_d){
res =(res+dp[j])%MOD;
}
}
}
it->second = res;
}
dp[i] = (req[i][d[i]]-req[min(N, i+x[i]*d[i])][d[i]]+MOD+1)%MOD;
for(int j = 1; j<K; j++){
sufs[j][i%j] = (sufs[j][i%j] + dp[i])%MOD;
}
}
cout<<dp[0]<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |