結果
| 問題 |
No.1097 Remainder Operation
|
| コンテスト | |
| ユーザー |
Manuel1024
|
| 提出日時 | 2021-04-15 19:19:48 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,239 bytes |
| コンパイル時間 | 673 ms |
| コンパイル使用メモリ | 72,112 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-02 04:00:54 |
| 合計ジャッジ時間 | 5,145 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 10 WA * 11 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
using ll = long long int;
int main(){
int n;
cin >> n;
vector<int> a(n);
for(auto &p: a) cin >> p;
int q;
cin >> q;
vector<int> k(q);
for(auto &p: k) cin >> p;
vector<int> order(n+10, -1);
vector<ll> x(n+10, 0);
ll loopstart, loopend, mod, prenum;
for(int i = 1, r = 0; ; i++){
order[r] = i;
x[i] = x[i-1] + a[r];
int prevr = r;
r = x[i]%n;
if(order[r] != -1){
loopstart = order[r];
loopend = order[prevr];
prenum = order[r]-1;
mod = loopend - loopstart + 1;
//cerr << loopstart << " " << loopend << endl;
break;
}
}
vector<ll> loopsum(mod+1);
for(int i = 0; i < mod; i++) loopsum[i] = x[i+loopstart]-x[loopstart-1];
for(auto &p: k){
if(p < loopstart) cout << x[p] << endl;
else{
ll ans = x[loopstart-1];
ll loopcnt = (p-loopstart+1)/mod;
ll loopind = (p-loopstart+1)%mod -1;
ans += loopcnt * loopsum[mod-1];
if(loopind != -1) ans += loopsum[loopind];
cout << ans << endl;
}
}
return 0;
}
Manuel1024