結果
問題 | No.451 575 |
ユーザー | tnakao0123 |
提出日時 | 2016-12-02 17:54:36 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 34 ms / 2,000 ms |
コード長 | 2,316 bytes |
コンパイル時間 | 700 ms |
コンパイル使用メモリ | 83,760 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-05-09 19:19:07 |
合計ジャッジ時間 | 3,402 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 1 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 | 5 ms
5,376 KB |
testcase_07 | AC | 21 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 1 ms
5,376 KB |
testcase_10 | AC | 9 ms
5,376 KB |
testcase_11 | AC | 26 ms
5,376 KB |
testcase_12 | AC | 34 ms
5,376 KB |
testcase_13 | AC | 34 ms
5,376 KB |
testcase_14 | AC | 2 ms
5,376 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | AC | 5 ms
5,376 KB |
testcase_17 | AC | 20 ms
5,376 KB |
testcase_18 | AC | 21 ms
5,376 KB |
testcase_19 | AC | 14 ms
5,376 KB |
testcase_20 | AC | 2 ms
5,376 KB |
testcase_21 | AC | 1 ms
5,376 KB |
testcase_22 | AC | 1 ms
5,376 KB |
testcase_23 | AC | 33 ms
5,376 KB |
testcase_24 | AC | 18 ms
5,376 KB |
testcase_25 | AC | 2 ms
5,376 KB |
testcase_26 | AC | 2 ms
5,376 KB |
testcase_27 | AC | 2 ms
5,376 KB |
testcase_28 | AC | 1 ms
5,376 KB |
testcase_29 | AC | 3 ms
5,376 KB |
testcase_30 | AC | 19 ms
5,376 KB |
testcase_31 | AC | 2 ms
5,376 KB |
testcase_32 | AC | 6 ms
5,376 KB |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:62:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 62 | scanf("%d", &n); | ~~~~~^~~~~~~~~~ main.cpp:63:36: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 63 | for (int i = 0; i < n; i++) scanf("%lld", &bs[i]); | ~~~~~^~~~~~~~~~~~~~~~
ソースコード
/* -*- coding: utf-8 -*- * * 451.cc: No.451 575 - yukicoder */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<stack> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<functional> using namespace std; /* constant */ const int MAX_N = 100000; typedef long long ll; const ll LINF = 1LL << 62; const ll MIN_A = 1; const ll MAX_A = 1000000000000000000LL; /* typedef */ /* global variables */ ll as[MAX_N + 1], bs[MAX_N]; /* subroutines */ /* main */ // b_i = a_i + a_(i+1) (if i % 2 == 0) // b_i = a_i - a_(i+1) (if i % 2 == 1) // // a_(i+1) = b_i - a_i (if i % 2 == 0) // a_(i+1) = a_i - b_i (if i % 2 == 1) // // a0 = a0 // a1 = b0 - a0 // a2 = a1 - b1 = b0 - a0 - b1 = (b0-b1) - a0 // a3 = b2 - a2 = b2 - ((b0 - b1) - a0) = -b0+b1+b2 + a0 // a4 = a3 - b3 = -b0+b1+b2-b3 + a0 // a5 = b4 - a4 = b4 - (-b0+b1+b2-b3 + a0) = b0-b1-b2+b3+b4 - a0 // a6 = a5 - b5 = b0-b1-b2+b3+b4-b5 - a0 int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%lld", &bs[i]); ll mina0 = LINF, maxa0 = -LINF, mina1 = 0, maxa1 = 0; as[0] = 0; for (int i = 0; i < n; i++) { as[i + 1] = ((i & 1) == 0) ? bs[i] - as[i] : as[i] - bs[i]; ll &ai = as[i + 1]; if ((i & 2) == 0) { if (mina0 > ai) mina0 = ai; if (maxa0 < ai) maxa0 = ai; } else { if (mina1 > ai) mina1 = ai; if (maxa1 < ai) maxa1 = ai; } } //printf("mina0=%lld, maxa0=%lld\n", mina0, maxa0); //printf("mina1=%lld, maxa1=%lld\n", mina1, maxa1); // 1 <= mina0 - a, maxa0 - a <= 10^18 // -> a <= mina0 - 1, a >= maxa0 - 10^18 // 1 <= mina1 + a, maxa1 + a <= 10^18 // -> a >= 1 - mina1, a <= 10^18 - maxa1 ll mina = MIN_A, maxa = MAX_A; if (mina < maxa0 - MAX_A) mina = maxa0 - MAX_A; if (maxa > mina0 - MIN_A) maxa = mina0 - MIN_A; if (mina < MIN_A - mina1) mina = MIN_A - mina1; if (maxa > MAX_A - maxa1) maxa = MAX_A - maxa1; //printf("mina=%lld, maxa=%lld\n", mina, maxa); if (mina > maxa) puts("-1"); else { printf("%d\n%lld\n", n + 1, mina); for (int i = 0; i < n; i++) printf("%lld\n", as[i + 1] + mina * (((i & 2) == 0) ? -1 : 1)); } return 0; }