結果
問題 | No.1013 〇マス進む |
ユーザー | T1610 |
提出日時 | 2020-03-20 22:48:34 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 238 ms / 2,000 ms |
コード長 | 3,514 bytes |
コンパイル時間 | 1,713 ms |
コンパイル使用メモリ | 172,016 KB |
実行使用メモリ | 42,880 KB |
最終ジャッジ日時 | 2024-05-08 23:24:27 |
合計ジャッジ時間 | 9,992 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 3 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 3 ms
5,376 KB |
testcase_13 | AC | 6 ms
5,376 KB |
testcase_14 | AC | 81 ms
22,016 KB |
testcase_15 | AC | 158 ms
33,920 KB |
testcase_16 | AC | 141 ms
31,104 KB |
testcase_17 | AC | 66 ms
19,584 KB |
testcase_18 | AC | 91 ms
23,296 KB |
testcase_19 | AC | 44 ms
15,104 KB |
testcase_20 | AC | 212 ms
40,448 KB |
testcase_21 | AC | 59 ms
18,304 KB |
testcase_22 | AC | 95 ms
24,192 KB |
testcase_23 | AC | 23 ms
9,856 KB |
testcase_24 | AC | 222 ms
41,984 KB |
testcase_25 | AC | 200 ms
41,088 KB |
testcase_26 | AC | 22 ms
9,984 KB |
testcase_27 | AC | 52 ms
17,536 KB |
testcase_28 | AC | 23 ms
9,984 KB |
testcase_29 | AC | 193 ms
39,808 KB |
testcase_30 | AC | 46 ms
15,744 KB |
testcase_31 | AC | 107 ms
27,520 KB |
testcase_32 | AC | 70 ms
21,248 KB |
testcase_33 | AC | 75 ms
21,248 KB |
testcase_34 | AC | 147 ms
32,000 KB |
testcase_35 | AC | 154 ms
30,336 KB |
testcase_36 | AC | 7 ms
5,376 KB |
testcase_37 | AC | 7 ms
5,376 KB |
testcase_38 | AC | 172 ms
34,816 KB |
testcase_39 | AC | 41 ms
13,440 KB |
testcase_40 | AC | 179 ms
31,872 KB |
testcase_41 | AC | 27 ms
10,368 KB |
testcase_42 | AC | 71 ms
20,480 KB |
testcase_43 | AC | 45 ms
14,080 KB |
testcase_44 | AC | 74 ms
21,504 KB |
testcase_45 | AC | 61 ms
19,328 KB |
testcase_46 | AC | 29 ms
10,880 KB |
testcase_47 | AC | 69 ms
20,352 KB |
testcase_48 | AC | 90 ms
23,680 KB |
testcase_49 | AC | 161 ms
31,744 KB |
testcase_50 | AC | 115 ms
27,392 KB |
testcase_51 | AC | 105 ms
24,832 KB |
testcase_52 | AC | 16 ms
7,552 KB |
testcase_53 | AC | 23 ms
9,600 KB |
testcase_54 | AC | 132 ms
30,208 KB |
testcase_55 | AC | 32 ms
11,008 KB |
testcase_56 | AC | 191 ms
37,632 KB |
testcase_57 | AC | 117 ms
26,368 KB |
testcase_58 | AC | 238 ms
42,880 KB |
testcase_59 | AC | 224 ms
42,624 KB |
testcase_60 | AC | 233 ms
42,624 KB |
testcase_61 | AC | 214 ms
42,752 KB |
testcase_62 | AC | 200 ms
42,624 KB |
testcase_63 | AC | 2 ms
5,376 KB |
testcase_64 | AC | 2 ms
5,376 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) REP(i,0,n) #define REP(i,s,e) for(int i=(s); i<(int)(e); i++) #define repr(i, n) REPR(i, n, 0) #define REPR(i, s, e) for(int i=(int)(s-1); i>=(int)(e); i--) #define pb push_back #define all(r) r.begin(),r.end() #define rall(r) r.rbegin(),r.rend() #define fi first #define se second typedef long long ll; typedef vector<int> vi; typedef vector<ll> vl; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const ll INF = 1e18; const ll MOD = 1e9 + 7; const double EPS = 1e-8; template<typename T> T chmax(T& a, const T& b){return a = (a > b ? a : b);} template<typename T> T chmin(T& a, const T& b){return a = (a < b ? a : b);} #define DEBUG_MODE #ifdef DEBUG_MODE #define dump(x) cout << #x << " : " << x << " " #define dumpL(x) cout << #x << " : " << x << '\n' #define LINE cout << "line : " << __LINE__ << " " #define LINEL cout << "line : " << __LINE__ << '\n' #define dumpV(v) cout << #v << " : ["; for(auto& t : v) cout << t << ", "; cout<<"]" << " " #define dumpVL(v) cout << #v << " : ["; for(auto& t : v) cout << t << ", "; cout<<"]" << endl #define STOP assert(false) #else #define dump(x) #define dumpL(x) #define LINE #define LINEL #define dumpV(v) #define dumpVL(v) #define STOP assert(false) #endif #define mp make_pair namespace std { template<class S, class T> ostream &operator <<(ostream& out, const pair<S, T>& a) { out << '(' << a.fi << ", " << a.se << ')'; return out; } } namespace Doubling { using NODE_TYPE = int; using COST_TYPE = long long; // d[i][0]はあらかじめ計算しておく! void preCalc(vector<vector<NODE_TYPE>>& d, vector<vector<NODE_TYPE>>& over) { int n = d.size(); int m = d[0].size(); REP(j, 1, m) rep(i, n) { int cur = d[i][j-1]; d[i][j] = d[d[i][j-1]][j-1]; over[i][j] = over[i][j-1] + over[cur][j-1]; } } // 頂点uからcostでいける頂点を求める ll getNode(NODE_TYPE u, COST_TYPE cost, const vector<vector<NODE_TYPE>>& d, vector<vector<NODE_TYPE>>& over) { int n = d.size(); int m = d[0].size(); NODE_TYPE cur = u; ll x = 0; repr(j, m) { if(cost&(COST_TYPE(1)<<j)) { x += over[cur][j]; cur = d[cur][j]; } } return cur + x * n; } // 頂点uから頂点vまでのコストを求める(iはトポロジカルソート後のidx) COST_TYPE getCost(NODE_TYPE u, NODE_TYPE v, const vector<vector<NODE_TYPE>>& d) { if(u >= v) assert(false); int n = d.size(); int m = d[0].size(); int cur = u; COST_TYPE ret = 0; while(cur < v) { if(d[cur][0] >= v) { ret += 1; break; } int j = lower_bound(all(d[cur]), v) - d[cur].begin() - 1; cur = d[cur][j]; ret+= COST_TYPE(1) << j; } return ret; } }; int main(){ cin.tie(0); ios::sync_with_stdio(false); int n, k; cin >> n >> k; vi p(n); rep(i, n) cin >> p[i]; vector<vi> d(n, vi(40, -1)); vector<vi> over(n, vi(40, -1)); rep(i, n) { d[i][0] = (i+p[i]) %n; over[i][0] = (i >= d[i][0] ? 1 : 0); // dump(i);dump(d[i][0]);dumpL(over[i][0]); } Doubling::preCalc(d, over); rep(i, n) { cout << Doubling::getNode(i, k, d, over)+1 << '\n'; } return 0; }