結果
| 問題 |
No.831 都市めぐり
|
| コンテスト | |
| ユーザー |
@abcde
|
| 提出日時 | 2019-05-25 20:36:18 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 33 ms / 2,000 ms |
| コード長 | 1,416 bytes |
| コンパイル時間 | 1,595 ms |
| コンパイル使用メモリ | 173,992 KB |
| 実行使用メモリ | 19,712 KB |
| 最終ジャッジ日時 | 2024-09-17 15:06:37 |
| 合計ジャッジ時間 | 2,492 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 18 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {
// 1. 入力情報取得.
LL N;
cin >> N;
// 2. ぐるぐるする.
deque<LL> dq;
// 2-1. N が 偶数の場合.
// ex.
// N = 4 -> 2 4 1 3 2
// N = 6 -> 3 4 2 6 1 5 3
if(N % 2 == 0){
for(LL i = 1; i <= N / 2; i++){
// 奇数の場合.
if(i % 2 == 1) dq.push_back(i), dq.push_front(N + 1 - i);
// 偶数の場合.
if(i % 2 == 0) dq.push_front(i), dq.push_back(N + 1 - i);
}
if(N % 4 == 0) dq.push_back(dq.front());
if(N % 4 != 0) dq.push_front(dq.back());
}
// 2-2. N が 奇数の場合.
// ex.
// N = 7 -> 4 5 2 7 1 6 3 4
if(N % 2 != 0 && N > 1){
for(LL i = 1; i <= (N + 1) / 2; i++){
// 奇数ならば, 後ろに追加.
if(i % 2 == 1) dq.push_back(i), dq.push_front(N + 1 - i);
// 偶数ならば, 前に追加.
if(i % 2 == 0) dq.push_front(i), dq.push_back(N + 1 - i);
}
}
// for(auto &p : dq) cout << p << " ";
// 3. 集計.
LL ans = 0;
for(int i = 1; i < dq.size(); ++i){
ans += dq[i] * dq[i - 1];
ans += (dq[i] - dq[i - 1]);
}
// 4. 後処理.
// ex.
// N = 2000000 -> 1333335333334999999 で OK?
cout << ans << endl;
return 0;
}
@abcde