yukicoder - No.648
No.648 お や す み
誤差やオーバーフローが怖いなら二分探索するという手もある.
#include "bits/stdc++.h" using namespace std; ll triangle(ll n) { return n * (n + 1) / 2; } ll search(ll n) { ll l = 1, m, r = 2000000000; while (l <= r) { m = (l + r) / 2; ll x = triangle(m); if (x == n) return m; else if (x < n) l = m + 1; else r = m - 1; } return -1; } int main() { ll n; cin >> n; ll ans = search(n); if (ans < 0) cout << "NO" << endl; else cout << "YES" << endl << ans << endl; return 0; }