# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
44980 | OneSubmissionMan | Boat (APIO16_boat) | C++11 | 197 ms | 4808 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
# include <bits/stdc++.h>
# define x first
# define y second
# define mp make_pair
// everything go according to my plan
# define pb push_back
# define sz(a) (int)(a.size())
# define vec vector
// shimkenttin kyzdary, dzyn, dzyn, dzyn...
# define y1 Y_U_NO_y1
# define left Y_U_NO_left
# define right Y_U_NO_right
using namespace std;
typedef pair <int, int> pii;
typedef long long ll;
typedef long double ld;
const int Mod = (int)1e9 + 7;
const int MX = 1073741822;
const ll MXLL = 4e18;
const int Sz = 1110111;
// a pinch of soul
inline void Read_rap () {
ios_base :: sync_with_stdio(0);
cin.tie(0); cout.tie(0);
}
inline void randomizer3000 () {
unsigned int seed;
asm ("rdtsc" : "=A"(seed));
srand (seed);
}
void files (string problem) {
if (fopen ((problem + ".in").c_str(),"r")) {
freopen ((problem + ".in").c_str(),"r",stdin);
freopen ((problem + ".out").c_str(),"w",stdout);
}
}
void localInput(const char in[] = "s") {
if (fopen (in, "r")) {
freopen (in, "r", stdin);
}
else
cerr << "Warning: Input file not found" << endl;
}
const int N = 500 + 1;
int n;
map <int, vec<int> > add;
int dp[2*N][N], pref[2*N][N];
void Add (int &a, int b) {
a += b;
if (a > Mod) a -= Mod;
}
int binpow (ll a, int b) {
int res = 1;
while (b) {
if (b & 1)
res = (res * a) % Mod;
b >>= 1;
a = (a * a) % Mod;
}
return res;
}
int inv (int a) {
return binpow (a, Mod-2);
}
int main()
{
# ifdef Local
//localInput();
# endif
Read_rap();
cin >> n;
for (int i = 1; i <= n; i++) {
int a, b; cin >> a >> b;
add[a].pb (i);
add[b + 1].pb (i);
}
vec <int> len (1);
vec <vec <int> > v(1);
set <int> s;
for (auto x : add)
len.pb (x.x), v.pb (x.y);
for (int i = 1; i < sz(len) - 1; i++)
len[i] = len[i + 1] - len[i];
len.pop_back();
for (int i = 0; i <= n; i++)
pref[0][i] = 1;
for (int t = 1; t < sz(len); t++) {
int seglen = len[t];
for (auto y : v[t]) {
if (s.count (y)) s.erase (y); else s.insert (y);
}
static vec<int> id;
id = vec<int> (s.begin(), s.end());
for (int i = 0; i < sz(id); i++) {
if (seglen > 1) {
ll sum = 0;
ll C = seglen;
for (int j = i+1; j < sz(id); j++) {
int k = j - i + 1;
if (k <= seglen) {
C = (C * (seglen - k + 1) ) % Mod * inv (k) % Mod;
sum = (sum + C) % Mod;
}
Add (dp[t][id[j]], sum * 1ll * pref[t - 1][id[i] - 1] % Mod);
}
}
Add (dp[t][id[i]], pref[t - 1][id[i] - 1] * 1ll * seglen % Mod);
}
for (int i = 1; i <= n; i++)
Add (dp[t][i], dp[t - 1][i]);
pref[t][0] = 1;
for (int i = 1; i <= n; i++)
pref[t][i] = (pref[t][i - 1] + dp[t][i] + 0ll) % Mod;
}
int ans = pref[sz(len) - 1][n] - 1;
if (ans < 0) ans += Mod;
cout << ans;
return 0;
}
// Coded by Z..
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |