제출 #1021075

#제출 시각아이디문제언어결과실행 시간메모리
1021075awu던전 (IOI21_dungeons)C++17
컴파일 에러
0 ms0 KiB
#include <bits/extc++.h> using namespace std; using namespace __gnu_pbds; #define int long long #define ll long long // #define double long double #define f first #define s second #define all(x) x.begin(), x.end() #define debug(...) [&](decltype(__VA_ARGS__) _x){cerr << #__VA_ARGS__ << " = " << _x << endl; return _x;}(__VA_ARGS__) using pii = pair<int, int>; const ll inf = 1ll << 60; // const int inf = 1 << 30; template <typename T, typename U> ostream& operator<<(ostream& out, pair<T, U> p) { out << "(" << p.f << ", " << p.s << ")"; return out; } template<typename T> typename enable_if<!is_same<T, const char *>::value && !is_same<T, string>::value, ostream&>::type operator<<(ostream& out, T o) { out << "{"; int g = o.size(); for(auto i : o) out << i << (--g ? ", " : ""); out << "}"; return out; } // void my_assert(bool b) { // if(!b) { // cerr << "Assertion failed" << endl; // *((volatile int*)0); // } // } // #undef assert // #define assert my_assert int millis() { return chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count(); } int pt = 0; int start_time; void pstart() { start_time = millis(); } void pend() { pt += millis() - start_time; } int n; vector<signed> s, p, w, l; const int nk = 25; const int jl = 20; signed jmp[nk][50005][jl], mx[nk][50005][jl]; int prec[nk][50005][jl]; // mx is exc void init(signed N, vector<signed> S, vector<signed> P, vector<signed> W, vector<signed> L) { pstart(); n = N; s = S; p = P; w = W; l = L; for(int i = 0; i < nk; i++) { for(int j = 0; j < n; j++) { if((1 << i) >= s[j]) { jmp[i][j][0] = w[j]; prec[i][j][0] = s[j]; mx[i][j][0] = 1 << 30; } else { jmp[i][j][0] = l[j]; prec[i][j][0] = p[j]; mx[i][j][0] = s[j]; } } fill(all(jmp[i][n]), n); fill(all(mx[i][n]), inf); for(int k = 1; k < jl; k++) { for(int j = 0; j < n; j++) { jmp[i][j][k] = jmp[i][jmp[i][j][k - 1]][k - 1]; prec[i][j][k] = prec[i][j][k - 1] + prec[i][jmp[i][j][k - 1]][k - 1]; mx[i][j][k] = min(mx[i][j][k - 1], (signed)max(0ll, mx[i][jmp[i][j][k - 1]][k - 1] - prec[i][j][k - 1])); } } } pend(); debug(pt); assert(pt < 2000); } int fastlog2(int x) { return 63 - __builtin_clzll(x); } int simulate(signed x, signed Z) { int z = Z; int li = -1; while(x != n) { if(z >= s[x]) { z += s[x]; x = w[x]; } else { z += p[x]; x = l[x]; } int i = fastlog2(z); assert(z >= 1e7 || i > li); li = i; i = min(i, nk - 1); for(int k = jl - 1; k >= 0; k--) { if(z < mx[i][x][k]) { z += prec[i][x][k]; x = jmp[i][x][k]; if(x == n) break; } } // assert(x == n || z >= s[x]); } return z; }

컴파일 시 표준 에러 (stderr) 메시지

dungeons.cpp: In function 'void init(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
dungeons.cpp:10:18: error: request for member 'begin' in 'jmp[i][n]', which is of non-class type 'int [20]'
   10 | #define all(x) x.begin(), x.end()
      |                  ^~~~~
dungeons.cpp:78:10: note: in expansion of macro 'all'
   78 |     fill(all(jmp[i][n]), n);
      |          ^~~
dungeons.cpp:10:29: error: request for member 'end' in 'jmp[i][n]', which is of non-class type 'int [20]'
   10 | #define all(x) x.begin(), x.end()
      |                             ^~~
dungeons.cpp:78:10: note: in expansion of macro 'all'
   78 |     fill(all(jmp[i][n]), n);
      |          ^~~
dungeons.cpp:10:18: error: request for member 'begin' in 'mx[i][n]', which is of non-class type 'int [20]'
   10 | #define all(x) x.begin(), x.end()
      |                  ^~~~~
dungeons.cpp:79:10: note: in expansion of macro 'all'
   79 |     fill(all(mx[i][n]), inf);
      |          ^~~
dungeons.cpp:10:29: error: request for member 'end' in 'mx[i][n]', which is of non-class type 'int [20]'
   10 | #define all(x) x.begin(), x.end()
      |                             ^~~
dungeons.cpp:79:10: note: in expansion of macro 'all'
   79 |     fill(all(mx[i][n]), inf);
      |          ^~~