結果
| 問題 |
No.1237 EXP Multiple!
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-10-09 15:57:31 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 79 ms / 2,000 ms |
| コード長 | 1,966 bytes |
| コンパイル時間 | 741 ms |
| コンパイル使用メモリ | 96,668 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 06:50:48 |
| 合計ジャッジ時間 | 2,232 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 19 |
ソースコード
#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <limits>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#define repeat(i, n) for (int i = 0; (i) < (n); ++(i))
#define repeat_from(i, m, n) for (int i = (m); (i) < (n); ++(i))
using namespace std;
template <class T>
inline int sz(T &x) {
return x.size();
}
template <class T>
inline bool setmax(T &a, T b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template <class T>
inline bool setmin(T &a, T b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template <typename T, typename X>
auto vectors(T a, X x) { return vector<T>(x, a); }
template <typename T, typename X, typename Y, typename... Zs>
auto vectors(T a, X x, Y y, Zs... zs) {
auto cont = vectors(a, y, zs...);
return vector<decltype(cont)>(x, cont);
}
long long ll_pow(long long x, int n) {
long long res = 1;
while (n > 0) {
if (n & 1) res *= x;
x *= x;
n >>= 1;
}
return res;
}
long long factorial(long long x) {
long long res = 1;
while (x > 0) {
res *= x;
--x;
}
return res;
}
int main() {
int N;
cin >> N;
vector<int> A(N);
repeat(i, N) cin >> A[i];
int maxA = -10, minA = 1000000010;
repeat(i, N) {
setmax(maxA, A[i]);
setmin(minA, A[i]);
}
//cout << maxA << endl;
//cout << minA << endl;
if (maxA >= 4) {
cout << 1000000007 << endl;
} else if (minA == 0) {
cout << -1 << endl;
} else {
long long res = 1;
repeat(i, N) {
res *= ll_pow(A[i], factorial(A[i]));
if (1000000007 <= res) {
cout << 1000000007 << endl;
return 0;
}
}
cout << 1000000007 % res << endl;
}
return 0;
}