結果
| 問題 | No.3557 KCPC or KUPC 2 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-29 19:55:14 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,683 bytes |
| 記録 | |
| コンパイル時間 | 3,203 ms |
| コンパイル使用メモリ | 331,292 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-05-29 19:55:24 |
| 合計ジャッジ時間 | 9,586 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_1 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 30 |
| 部分点2 | 40 % | AC * 30 |
| 部分点3 | 50 % | AC * 30 |
| 合計 | 100 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using i128 = __int128_t;
int main() {
long long n;
cin >> n;
long long a, b, c;
long long d, e, f;
cin >> a >> b >> c;
cin >> d >> e >> f;
long long lo1 = 1, hi1 = 1;
while (true) {
long long full = hi1 / b;
long long rem = hi1 % b;
i128 total = (i128)b * full * (2LL * a + (full - 1) * c) / 2;
total += (i128)rem * (a + full * c);
if (total >= n) break;
hi1 *= 2;
}
while (lo1 < hi1) {
long long mid = lo1 + (hi1 - lo1) / 2;
long long full = mid / b;
long long rem = mid % b;
i128 total = (i128)b * full * (2LL * a + (full - 1) * c) / 2;
total += (i128)rem * (a + full * c);
if (total >= n)
hi1 = mid;
else
lo1 = mid + 1;
}
long long kcpc = lo1;
long long lo2 = 1, hi2 = 1;
while (true) {
long long full = hi2 / e;
long long rem = hi2 % e;
i128 total = (i128)e * full * (2LL * d + (full - 1) * f) / 2;
total += (i128)rem * (d + full * f);
if (total >= n) break;
hi2 *= 2;
}
while (lo2 < hi2) {
long long mid = lo2 + (hi2 - lo2) / 2;
long long full = mid / e;
long long rem = mid % e;
i128 total = (i128)e * full * (2LL * d + (full - 1) * f) / 2;
total += (i128)rem * (d + full * f);
if (total >= n)
hi2 = mid;
else
lo2 = mid + 1;
}
long long kupc = lo2;
if (kcpc < kupc)
cout << "KCPC";
else if (kupc < kcpc)
cout << "KUPC";
else
cout << "Same";
}