C++の練習を兼ねて, AtCoder Grand Contest 036 の 問題A (A – Triangle) を解いてみた.
■感想.
1. 基本的には, 座標平面上で三角形の面積を計算する公式 を ベースに実装した.
2. とりあえず, 解説見る前に解けたので, 及第点は, 取れたように思う.
本家のサイトAGC036解説をご覧下さい.
■C++版プログラム(問題A/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <bits/stdc++.h> using namespace std; using LL = long long; const LL UPPER = 1e9; int main(){ // 1. 入力情報取得. LL S; scanf("%lld", &S); // 2. 三頂点を計算. // (X1, Y1) は, 原点と設定. // 座標平面上で三角形の面積を計算する公式. // https://mathwords.net/x1y2hikux2y LL X1, X2, X3, Y1, Y2, Y3; X1 = 0LL; Y1 = 0LL; X2 = min((LL)sqrt(S) + 1LL, UPPER); Y3 = min((LL)sqrt(S) + 1LL, UPPER); Y2 = 1LL; X3 = X2 * Y3 - S; // printf("%lld\n", X2 * Y3 - Y2 * X3); // 3. 出力 ~ 後処理. printf("%lld %lld %lld %lld %lld %lld\n", X1, Y1, X2, Y2, X3, Y3); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
[入力例] 1 [出力例(debug版)] 1 0 0 2 1 3 2 [入力例] 2 [出力例(debug版)] 2 0 0 2 1 2 2 [入力例] 3 [出力例(debug版)] 3 0 0 3 0 3 1 ※AtCoderテストケースより [入力例] 4 [出力例(debug版)] 4 0 0 3 1 5 3 [入力例] 100 [出力例(debug版)] 100 0 0 11 1 21 11 ※AtCoderテストケースより [入力例] 54321 [出力例(debug版)] 54321 0 0 234 1 435 234 [入力例] 311114770564041497 [出力例(debug版)] 311114770564041497 0 0 557776632 1 641221927 557776632 ※AtCoderテストケースより [入力例] 1000000000000000000 [出力例(debug版)] 1000000000000000000 0 0 1000000000 1 0 1000000000 [入力例] 999999999999999999 [出力例(debug版)] 999999999999999999 0 0 1000000000 1 1 1000000000 |