# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
113428 | ansol4328 | Boat (APIO16_boat) | C++11 | 448 ms | 8420 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
ll n, m[505][2];
ll v[1005], inv[505];
ll dp1[505][1005], dp2[505][1005];
map<ll,ll> cont;
const ll MOD=1e9+7;
ll get_mod(ll x, ll y)
{
if(y==1) return x;
ll ret=get_mod(x,y/2);
(ret*=ret)%=MOD;
if(y%2==1) (ret*=x)%=MOD;
return ret;
}
int main()
{
scanf("%lld",&n);
inv[n]=1;
for(ll i=1 ; i<=n ; i++)
{
scanf("%lld %lld",&m[i][0],&m[i][1]);
cont[m[i][0]]=0;
cont[m[i][1]]=0;
(inv[n]*=i)%=MOD;
}
//contracting
ll cnt=0, contn;
for(auto it=cont.begin() ; it!=cont.end() ; it++)
{
it->second=++cnt;
v[cnt]=it->first;
}
contn=cnt;
for(ll i=1 ; i<=n ; i++)
{
m[i][0]=cont[m[i][0]];
m[i][1]=cont[m[i][1]];
}
//making modular inverse
inv[n]=get_mod(inv[n],MOD-2);
for(ll i=n ; i>1 ; i--) inv[i-1]=(inv[i]*i)%MOD;
//DP
ll res=0;
for(ll i=0 ; i<=contn ; i++) dp1[0][i]=1;
for(ll i=1 ; i<=n ; i++)
{
for(ll j=m[i][0] ; j<m[i][1] ; j++)
{
ll gap=v[j+1]-v[j];
ll k1=gap-1, fac1=gap, c=1;
for(ll k=i-1 ; k>=0 ; k--) (dp1[i][j]+=(dp1[k][j-1]*gap))%=MOD;
for(ll k=i-1 ; k>=1 ; k--)
{
if(k1<=0) break;
if(m[k][0]<=j && j+1<=m[k][1])
{
c++;
(fac1*=k1)%=MOD;
ll val=(dp1[k-1][j-1]*fac1)%MOD;
(val*=inv[c])%=MOD;
(dp1[i][j]+=val)%=MOD;
k1--;
}
}
}
for(ll j=i-1 ; j>=0 ; j--) (dp2[i][m[i][1]]+=dp1[j][m[i][1]-1])%=MOD;
for(ll j=1 ; j<=contn ; j++)
{
(dp1[i][j]+=dp1[i][j-1]+dp2[i][j])%=MOD;
(dp2[i][j]+=dp2[i][j-1])%=MOD;
}
(res+=dp1[i][contn])%=MOD;
}
printf("%lld",res);
return 0;
}
컴파일 시 표준 에러 (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... |