結果
| 問題 | No.648 お や す み |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-26 15:09:55 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 2,000 ms |
| コード長 | 952 bytes |
| 記録 | |
| コンパイル時間 | 1,149 ms |
| コンパイル使用メモリ | 187,796 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-04-26 15:09:59 |
| 合計ジャッジ時間 | 3,629 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 84 |
ソースコード
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <iomanip>
#include <algorithm>
#include <numeric>
using namespace std;
const double INF = 2e9;
const double EPS = 1e-8;
pair<long long, long long> mm(long long M)
{
long long mm1, mm2;
if (M % 2 == 0)
{
mm1 = (M / 2);
mm2 = (M + 1);
}
else
{
mm1 = (M + 1) / 2;
mm2 = M;
}
return {mm1, mm2};
}
int main()
{
long long n;
cin >> n;
long long L = 0, R = 2000000000;
while (R - L > 1)
{
long long M = (R + L) / 2;
auto [mm1, mm2] = mm(M);
if (mm1 <= n / mm2)
{
L = M;
}
else
{
R = M;
}
}
auto [LL1, LL2] = mm(L);
if ((n % LL2 == 0) && (LL1 == n / LL2))
{
cout << "YES" << endl;
cout << L << endl;
}
else
{
cout << "NO" << endl;
}
}