$O(1)$
0! + 1! + ... + (n-1)! <= n!
19! 부터 0! 까지 뺄 수 있는데로 빼보고 가능한지 본다.
참고로 n이 0이면 불가능하다.
#include<cstdio> long long n, t = 2432902008176640000LL; int main() { scanf("%lld", &n); if (!n) n = -1; for (int i = 20; i; i--) { t /= i; if (n >= t) n -= t; } puts(n ? "NO" : "YES"); return 0; }
댓글 없음 :
댓글 쓰기