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;
}

浙公网安备 33010602011771号