結果
問題 | No.1034 テスターのふっぴーさん |
ユーザー | marurunn11 |
提出日時 | 2020-05-01 13:17:55 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 4,414 bytes |
コンパイル時間 | 2,664 ms |
コンパイル使用メモリ | 214,232 KB |
実行使用メモリ | 814,292 KB |
最終ジャッジ日時 | 2024-06-06 09:45:59 |
合計ジャッジ時間 | 5,675 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
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 | 3 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 3 ms
5,376 KB |
testcase_08 | AC | 3 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 82 ms
10,892 KB |
testcase_11 | AC | 52 ms
10,804 KB |
testcase_12 | AC | 47 ms
9,088 KB |
testcase_13 | AC | 76 ms
10,232 KB |
testcase_14 | AC | 51 ms
8,196 KB |
testcase_15 | AC | 57 ms
10,600 KB |
testcase_16 | AC | 32 ms
7,772 KB |
testcase_17 | AC | 38 ms
10,624 KB |
testcase_18 | AC | 73 ms
9,484 KB |
testcase_19 | AC | 58 ms
9,324 KB |
testcase_20 | RE | - |
testcase_21 | MLE | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
ソースコード
#define _GLIBCXX_DEBUG #include "bits/stdc++.h" //#include <intrin.h> //AtCoder (gcc) 上ではこれがあると動かない。__popcnt用のincludeファイル。 using namespace std; using Graph = vector<vector<int>>; typedef long long ll; typedef long double ld; #define int long long #define rep(i, n) for(long long i = 0; i < (n); i++) #define sqrt(d) pow((long double) (d), 0.50) const int INF = 2e9; const ll large_P = 1e9 + 7; //繰り返し2乗法 //N^aの、Mで割った余りを求める。 ll my_pow(ll N, ll a, ll M) { ll tempo; if (a == 0) { return 1; } else { if (a % 2 == 0) { tempo = my_pow(N, a / 2, M); return (tempo * tempo) % M; } else { tempo = my_pow(N, a - 1, M); return (tempo * N) % M; } } } //N_C_a を M で割った余り ll my_combination(ll N, ll a, ll M) { ll answer = 1; rep(i, a) { answer *= (N - i); answer %= M; } rep(i, a) { answer *= my_pow(i + 1, M - 2, M); answer %= M; } return answer; } ll my_gcd(ll& a, ll& b) { if (b == 0) return a; ll temp = a % b; return my_gcd(b, temp); } // long long型 n を、base 進法での、i 桁目の数が入った vector にする。 void ll_to_vector(ll base, ll n, vector<ll>& v) { ll tempo = n; ll n_digit = floor(log10(n) / log10(base)) + 1; v.assign(n_digit, 0); //ll n_digit = v.size(); for (ll i = 0; i < n_digit; i++) { v.at(i) = tempo / pow(base, n_digit - 1 - i); tempo -= v.at(i) * pow(base, n_digit - 1 - i); } } int char_to_int(char c) { switch (c) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default: return 0; } } //エラトステネスの篩で、prime で ないところに false を入れる。 //true で初期化された vector を代入する必要がある。 void prime_judge(vector<bool>& prime_or_not) { prime_or_not.at(0) = false; prime_or_not.at(1) = false; ll n = prime_or_not.size() - 1; ll region = sqrt(n) + 1; for (ll i = 2; i <= n / 2; i++) { prime_or_not.at(2 * i) = false; } for (ll i2 = 1; i2 < n / 2; i2++) { ll i = 2 * i2 + 1; //ここからは奇数のみ探索 if (i < region && prime_or_not.at(i)) { ll j = i * i; while (j < n + 1) { prime_or_not.at(j) = false; j += 2 * i; } } } }; map<int, int> divide_to_prime(int target) { map<int, int> res; //sqrt(target) まで調べる。 int upper_lim = ceil(sqrt(target)); vector<bool> prime_or_not(upper_lim + 1, true); if (upper_lim < 20) prime_or_not.assign(25, true); prime_judge(prime_or_not); int tempo = target; rep(i, upper_lim + 1) { if (prime_or_not.at(i)) { while (tempo % i == 0) { tempo /= i; res[i]++; } } } if (tempo != 1) res[tempo]++; //sqrt(target) より大きな素因数は高々1つしかない。 return res; } signed main() { int Q; cin >> Q; rep(i, Q) { int N; cin >> N; int I, J; cin >> I >> J; //int res = 0; //int w2 = N - 1 - w; //int h2 = N - 1 - h; //if (w >= h && (N - 1 - w) >= h && h < N / 2 + N % 2) { //res = 4 * (N - h) * h + (w - h); //} //else if (w >= h && (N - 1 - w) >= h && h < N / 2 + N % 2) { // //} vector<vector<int>> t(N, vector<int>(N, -1)); int dw = 1, dh = 0; int w = 0, h = 0; t.at(h).at(w) = 0; while (true) { while (0 <= h + dh && h + dh <= N - 1 && 0 <= w + dw && w + dw <= N - 1 && t.at(h + dh).at(w + dw) == -1) { t.at(h + dh).at(w + dw) = t.at(h).at(w) + 1; w += dw; h += dh; } //if (t.at(I).at(J) != -1) break; if (dw == 1 && dh == 0 && 0 <= w + 0 && w + 0 <= N - 1 && 0 <= h + 1 && h + 1 <= N - 1 && t.at(h + 1).at(w + 0) == -1) { dw = 0; dh = 1; } else if (dw == 0 && dh == 1 && 0 <= w - 1 && w - 1 <= N - 1 && 0 <= h + 0 && h + 0 <= N - 1 && t.at(h + 0).at(w - 1) == -1) { dw = -1; dh = 0; } else if (dw == -1 && dh == 0 && 0 <= w - 0 && w - 0 <= N - 1 && 0 <= h - 1 && h - 1 <= N - 1 && t.at(h - 1).at(w - 0) == -1) { dw = 0; dh = -1; } else if (dw == 0 && dh == -1 && 0 <= w + 1 && w + 1 <= N - 1 && 0 <= h - 0 && h - 0 <= N - 1 && t.at(h + 0).at(w + 1) == -1) { dw = 1; dh = 0; } else break; } cout << t.at(I).at(J) << endl; //rep(i, N) { //rep(j, N) { //cout << t.at(i).at(j) << " "; //} //cout << endl; //} } }