AtCoder Grand Contest 036

Contest Info


[Practice Link](https://atcoder.jp/contests/agc036/tasks)
Solved A B C D E F
1/6 Ø - - - - -
  • O 在比赛中通过
  • Ø 赛后通过
  • ! 尝试了但是失败了
  • - 没有尝试

Solutions


A.Triangle

题意:
在二维平面上选择三点,使得它们组成三角形的面积为\(S\).

  • \(0 \leq x_i, y_i \leq 10^9\)
  • \(1 \leq S \leq 10^{18}\)

思路:
固定\((x_0, y_0) = (0, 0)\), 那么三角形面积变成\(|x_1y_2 - x_2y_1|\),我们再固定\((x_1, y_1) = (1, 10^9)\),那么面积表达变成:

\[\begin{eqnarray*} |y_2 - 10^9 \cdot x_2| \end{eqnarray*} \]

有:

\[\begin{eqnarray*} \left\{ \begin{array}{cccc} y_2 &=& 10^9 - (S \bmod 10^9) \\ x_2 &=& \left\lceil \frac{S}{10^9} \right\rceil \end{array} \right. \end{eqnarray*} \]

那么有\(S = |y_2 - 10^9 \cdot x_2|\)

代码:

#include <bits/stdc++.h>
using namespace std;

#define ll long long
ll S, x[3], y[3];

int main() {
	while (scanf("%lld", &S) != EOF) {
		ll E9 = 1e9;
		x[0] = 0, y[0] = 0;
		x[2] = 1e9, y[2] = 1;
		y[1] = S / (E9) + (S % E9 != 0);
		x[1] = y[1] * E9 - S;
		for (int i = 0; i < 3; ++i) {
			printf("%lld %lld%c", x[i], y[i], " \n"[i == 2]);
		}
	}
	return 0;
}
posted @ 2019-07-22 08:14  Dup4  阅读(221)  评论(0)    收藏  举报