提出 #1131672
ソースコード 拡げる
//
//
//
// Created by Evgeny Savinov on 09/01/2017.
//
#include <bits/stdc++.h>
#define clr(x) memset((x), 0, sizeof(x))
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define mp make_pair
#define x first
#define y second
#define forn(i, n) for(int i = 0; i < (int)(n); ++i)
#define ford(i, n) for(int i = (int)(n) - 1; i >= 0; --i)
#define for1(i, n) for(int i = 1; i <= (int)(n); ++i)
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;
//typedef pair<long long, long long> pii;
typedef vector<long long> vll;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef int itn;
const ld PI = 3.1415926535897932384626433832795L;
template<class T>
bool uin(T &, const T &);
template<class T>
bool uax(T &, const T &);
template<class T>
T gcd(T, T);
template<class T>
T lcm(T, T);
template<class _T>
inline string tostr(const _T &);
template<typename T>
void input(T &);
class range {
using type = long long;
public:
class iterator {
friend class range;
public:
using difference_type = range::type;
using value_type = range::type;
using pointer = const range::type *;
using reference = const range::type &;
using iterator_category = std::random_access_iterator_tag;
value_type operator*() const { return i_; }
const iterator &operator++() {
++i_;
return *this;
}
iterator operator++(int) {
iterator copy(*this);
++i_;
return copy;
}
const iterator &operator--() {
--i_;
return *this;
}
iterator operator--(int) {
iterator copy(*this);
--i_;
return copy;
}
difference_type operator-(const iterator &other) const { return i_ - other.i_; }
iterator operator+(const difference_type &delta) const { return iterator(i_ + delta); }
iterator &operator+=(const difference_type &delta) {
i_ += delta;
return *this;
}
iterator operator-(const difference_type &delta) const { return iterator(i_ - delta); }
iterator &operator-=(const difference_type &delta) {
i_ -= delta;
return *this;
}
bool operator==(const iterator &other) const { return i_ == other.i_; }
bool operator!=(const iterator &other) const { return i_ != other.i_; }
protected:
iterator(const value_type &start) : i_(start) {}
private:
value_type i_;
};
iterator begin() const { return begin_; }
iterator end() const { return end_; }
range(const type &begin, const type &end) : begin_(begin), end_(end) {}
range(const type &end) : begin_(0), end_(end) {}
private:
iterator begin_;
iterator end_;
};
template<typename T = long long>
T nxt();
bool checkp(long long);
template<typename T>
T pw(T a, T n, T p);
template<typename T>
T inv(T a, T p);
template<class _T>
_T sqr(const _T &x);
class range;
mt19937_64 gen;
int TTT;
ll mod = 1000000007;
void pre() {
}
void solve(int test) {
int n = nxt();
vi a(n);
forn(i, n) a[i] = nxt();
ll ans = 1;
int cnt = 0;
int delta = 1;
for (int i = 0; i < n; ++i) {
// cerr << cnt << endl;
ans = (ans * (cnt + 1)) % mod;
++cnt;
while (a[i] + 1 < 2 * cnt) --cnt;
}
cout << ans << "\n";
}
int main(int argc, char **argv) {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#else
#define fname "sequence"
//freopen(fname".in", "r", stdin);
//freopen(fname".out", "w", stdout);
#endif
pre();
::TTT = 1;
#ifdef LOCAL
#else
#endif
for (int test = 1; test <= ::TTT; ++test) {
solve(test);
}
#ifdef LOCAL
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC * 1000 << " ms." << endl;
#endif
return 0;
}
template<typename T>
T gcd(T x, T y) {
while (y > 0) {
x %= y;
swap(x, y);
}
return x;
}
template<class T>
T lcm(T a, T b) {
return a / gcd(a, b) * b;
}
template<class _T>
inline _T sqr(const _T &x) {
return x * x;
}
template<class _T>
inline string tostr(const _T &a) {
ostringstream os("");
os << a;
return os.str();
}
template<typename T>
inline void input(T &a) {
static int ed;
a = 0;
while (!isdigit(ed = getchar()) && ed != '-') {}
char neg = 0;
if (ed == '-') {
neg = 1;
ed = getchar();
}
while (isdigit(ed)) {
a = 10 * a + ed - '0';
ed = getchar();
}
if (neg) a = -a;
}
template<typename T = long long>
inline T nxt() {
T res;
input(res);
return res;
}
void myassert(bool v) {
assert(v);
//cout << "FAIL\n";
//exit(0);
}
mt19937 generator;
bool checkp(long long v) {
if (v < 2) return false;
for (long long i = 2; i * i <= v; ++i) {
if (v % i == 0) {
return false;
}
}
return true;
}
template<typename T>
T pw(T a, T n, T m) {
T res = 1;
while (n) {
if (n & 1) {
res = res * a % m;
}
a = a * a % m;
n >>= 1;
}
return res;
}
template<typename T>
T inv(T a, T p) {
T res = 1;
while (a > 1) {
res = res * (p - p / a) % p;
a = p % a;
}
return res;
}
template<class T>
bool uin(T &a, const T &b) {
if (b < a) {
a = b;
return true;
}
return false;
}
template<class T>
bool uax(T &a, const T &b) {
if (b > a) {
a = b;
return true;
}
return false;
}
提出情報
| 提出日時 |
|
| 問題 |
A - Robot Racing |
| ユーザ |
savinov |
| 言語 |
C++14 (GCC 5.4.1) |
| 得点 |
900 |
| コード長 |
6015 Byte |
| 結果 |
AC |
| 実行時間 |
10 ms |
| メモリ |
640 KiB |
ジャッジ結果
| セット名 |
Sample |
Subtask |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
400 / 400 |
| 結果 |
|
|
|
| セット名 |
テストケース |
| Sample |
0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt |
| Subtask |
0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt |
| All |
0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 2_00.txt, 2_01.txt, 2_02.txt, 2_03.txt, 2_04.txt, 2_05.txt, 2_06.txt, 2_07.txt, 2_08.txt, 2_09.txt, 2_10.txt, 2_11.txt, 2_12.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 0_00.txt |
AC |
1 ms |
256 KiB |
| 0_01.txt |
AC |
1 ms |
256 KiB |
| 0_02.txt |
AC |
1 ms |
256 KiB |
| 0_03.txt |
AC |
1 ms |
256 KiB |
| 1_00.txt |
AC |
1 ms |
256 KiB |
| 1_01.txt |
AC |
1 ms |
256 KiB |
| 1_02.txt |
AC |
1 ms |
256 KiB |
| 1_03.txt |
AC |
1 ms |
256 KiB |
| 1_04.txt |
AC |
1 ms |
256 KiB |
| 1_05.txt |
AC |
1 ms |
256 KiB |
| 1_06.txt |
AC |
1 ms |
256 KiB |
| 1_07.txt |
AC |
1 ms |
256 KiB |
| 1_08.txt |
AC |
1 ms |
256 KiB |
| 1_09.txt |
AC |
1 ms |
256 KiB |
| 1_10.txt |
AC |
1 ms |
256 KiB |
| 2_00.txt |
AC |
7 ms |
640 KiB |
| 2_01.txt |
AC |
8 ms |
640 KiB |
| 2_02.txt |
AC |
10 ms |
640 KiB |
| 2_03.txt |
AC |
8 ms |
640 KiB |
| 2_04.txt |
AC |
8 ms |
640 KiB |
| 2_05.txt |
AC |
8 ms |
640 KiB |
| 2_06.txt |
AC |
8 ms |
640 KiB |
| 2_07.txt |
AC |
8 ms |
640 KiB |
| 2_08.txt |
AC |
8 ms |
640 KiB |
| 2_09.txt |
AC |
8 ms |
640 KiB |
| 2_10.txt |
AC |
8 ms |
640 KiB |
| 2_11.txt |
AC |
10 ms |
640 KiB |
| 2_12.txt |
AC |
10 ms |
640 KiB |