結果
問題 | No.500 階乗電卓 |
ユーザー |
|
提出日時 | 2020-09-26 14:45:00 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,032 bytes |
コンパイル時間 | 818 ms |
コンパイル使用メモリ | 104,552 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-29 02:05:27 |
合計ジャッジ時間 | 1,547 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
コンパイルメッセージ
main.cpp: In function 'll binary_search(ll, ll, ll, std::vector<long long int>)': main.cpp:50:21: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+13' to '2147483647' [-Woverflow] 50 | int right = 1e13; | ^~~~
ソースコード
#include <iostream>#include <numeric>#include <cmath>#include <limits>#include <stdio.h>#include <iomanip>#include <string> // string, to_string, stoi#include <vector> // vector#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound#include <utility> // pair, make_pair#include <tuple> // tuple, make_tuple#include <cstdint> // int64_t, int*_t#include <cstdio> // printf#include <map> // map#include <queue> // queue, priority_queue#include <set> // set#include <stack> // stack#include <deque> // deque#include <unordered_map> // unordered_map#include <unordered_set> // unordered_set#include <bitset> // bitset#include <cctype> // isupper, islower, isdigit, toupper, tolowerusing namespace std;using ll = long long;#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)ll Max(ll(a), ll(b), ll(c)) {return max(max(a, b), c);}ll Min(ll(a), ll(b), ll(c)) {return min(min(a, b), c);}bool kai(ll A, ll B, ll T,ll N,vector<ll> H) {ll an = 0;rep(i, N) {if (H[i] > B * T) {an += max(((H[i] - B * T - 1) / (A - B)) + 1, ll(0));}}if (an <= T) return true;else return false;}bool isOK(ll A, ll B, ll T, ll N, vector<ll> H) {if (kai(A,B,T,N,H)) return true;else return false;}ll binary_search(ll A,ll B,ll N, vector<ll> H) {int left = 0;int right = 1e13;while (right - left > 1) {int mid = left + (right - left) / 2;if (isOK(A,B,mid,N, H)) right = mid;else left = mid;}/* left は条件を満たさない最大の値、right は条件を満たす最小の値になっている */return right;}ll ketawa(ll N) {ll ans = 0;while (N > 0) {ans += N % 10;N /= 10;}return ans;}int main() {ll N;cin >> N;if (N >= 50) {cout << "000000000000" << endl;}else {ll an = 1;rep(i, N) {an *= (i + 1);an %= 1000000000000;}if (N < 15)cout << an << endl;else {string S = "";rep(i, 12) {S = char(an % 10 + '0') + S;an /= 10;}cout << S << endl;}}}