結果
| 問題 | No.550 夏休みの思い出(1) |
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-07-16 14:21:22 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 11 ms / 2,000 ms |
| コード長 | 1,107 bytes |
| 記録 | |
| コンパイル時間 | 234 ms |
| コンパイル使用メモリ | 32,000 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-30 14:15:28 |
| 合計ジャッジ時間 | 1,655 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 55 |
ソースコード
// yukicoder: No.550 夏休みの思い出(1)
// 2019.7.16 bal4u
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef long long ll;
#define ABS(x) ((x)>=0?(x):-(x))
int x[3];
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
// X^2 + BX + C = 0 (A=1)
int solve(int *x1, int *x2, ll b, ll c) {
ll d2, d;
d2 = b*b - 4*c; if (d2 < 0) return 0;
d = (ll)sqrt((double)d2) - 1;
while (d*d != d2) d++;
if ((-b + d) & 1) return 0;
*x1 = (-b + d) / 2;
*x2 = (-b - d) / 2;
return 1;
}
ll A, B, C;
int check(ll a) {
ll c;
if (ABS(a) >= 1000000) return 0;
c = -C/a;
if ((B-c) % a == 0 && -A-a == (B-c)/a) {
solve(x+1, x+2, A+a, c), x[0] = a;
} else if ((B+c) % a == 0 && A-a == (B+c)/a) {
solve(x+1, x+2, A-a, -c), x[0] = -a;
} else return 0;
return 1;
}
int main()
{
int a;
scanf("%lld%lld%lld", &A, &B, &C);
if (C == 0) x[0] = 0, solve(x+1, x+2, A, B);
else {
for (a = 1; ; a++) if (C % a == 0) {
if (check(a)) break;
if (check(C / a)) break;
}
}
qsort(x, 3, sizeof(int), cmp);
printf("%d %d %d\n", x[0], x[1], x[2]);
return 0;
}
bal4u