結果
| 問題 | No.3557 KCPC or KUPC 2 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-29 21:12:21 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,119 bytes |
| 記録 | |
| コンパイル時間 | 1,628 ms |
| コンパイル使用メモリ | 210,776 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-05-29 21:12:30 |
| 合計ジャッジ時間 | 3,284 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge4_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 30 |
| 部分点2 | 40 % | AC * 30 |
| 部分点3 | 50 % | AC * 30 |
| 合計 | 100 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
long long N; cin >> N;
long long a,b,c,d,e,f; cin >> a >> b >> c >> d >> e >> f;
__int128_t A = a,B = b,C = c,D = d,E = e,F = f;
__int128_t low = 0,high = 1001001001,one = 0,two = 0;
auto cal = [&](__int128_t a,__int128_t b,__int128_t n) -> __int128_t {
__int128_t ret = a*n;
ret += n*(n-1)/2*b;
return ret;
};
while(high-low > 1){
__int128_t mid = (high+low)/2;
if(cal(A,C,mid)*B >= N) high = mid;
else low = mid;
}
auto left = N-cal(A,C,low)*B;
auto now = A+C*low;
one = low*B;
one += (left+now-1)/now;
low = 0,high = 1001001001;
while(high-low > 1){
__int128_t mid = (high+low)/2;
if(cal(D,F,mid)*E >= N) high = mid;
else low = mid;
}
left = N-cal(D,F,low)*E;
now = D+F*low;
two = low*E;
two += (left+now-1)/now;
if(one == two) cout << "Same" << endl;
else if(one < two) cout << "KCPC" << endl;
else cout << "KUPC" << endl;
}