結果

問題 No.648  お や す み 
ユーザー ant2357
提出日時 2018-11-26 01:28:41
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 993 bytes
コンパイル時間 1,588 ms
コンパイル使用メモリ 192,848 KB
最終ジャッジ日時 2025-01-06 17:41:26
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 84
権限があれば一括ダウンロードができます

ソースコード

diff #

#include "bits/stdc++.h"

using namespace std;

using ll = long long;
using ld = long double;

const double PI = 3.1415926535897932384626433832795;

const int dx[] = { 0, 1, 0, -1 };
const int dy[] = { -1, 0, 1, 0 };

int gcd(int x, int y) { return y ? gcd(y, x % y) : abs(x); }
ll gcd(ll x, ll y) { return y ? gcd(y, x % y) : abs(x); }
int lcm(int x, int y) { return x / gcd(x, y) * y; }
ll lcm(ll x, ll y) { return x / gcd(x, y) * y; }

pair<bool, ll> solve(ll n) {
	auto f = [](ll v) { return v * (v + 1LL) / 2LL; };

	ll left = 0, right = INT_MAX;
	while (abs(right - left) > 1LL) {
		ll mid = (left + right) / 2LL;
		ll v = f(mid);

		if (v == n) {
			return {true, mid};
		}

		if (n < v) {
			right = mid;
		} else {
			left = mid;
		}
	}

	return {false, 0};
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	ll n;
	cin >> n;

	auto res = solve(n);

	if (res.first) {
		cout << "YES" << endl;
		cout << res.second << endl;
	} else {
		cout << "NO" << endl;
	}

	return 0;
}
0