# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
42617 | fefe | Boat (APIO16_boat) | C++14 | 18 ms | 748 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define MAX_N 505
#define mod 1000000007LL
#define pb push_back
typedef long long LL;
using namespace std;
struct node{
LL s,e;
}arr[MAX_N];
LL n,ans,inv[10*MAX_N];
LL t[MAX_N],sum[MAX_N],ss[MAX_N];
vector<LL> X,lst;
LL Pow(LL x,LL y){
if(y==0) return 1;
if(y==1) return x;
LL z=pow(x,y/2);
z*=z;z%=mod;
if(y%2) z*=x;
z%=mod;
return z;
}
int main(){
LL i,j,k,s,e,x,y,S,E,cnt,p;
scanf("%lld",&n);
for(i=1;i<=n;i++){
scanf("%lld %lld",&arr[i].s,&arr[i].e);
arr[i].e++;
X.pb(arr[i].s);X.pb(arr[i].e);
}
for(i=1;i<=4000;i++) inv[i]=Pow(i,mod-2);
sort(X.begin(),X.end());X.erase(unique(X.begin(),X.end()),X.end());
LL sz=X.size();
ss[0]=1;
for(i=0;i<=n;i++) sum[i]=1;
for(i=1;i<sz;i++){
s=X[i-1];
e=X[i];
lst.resize(0);
sum[0]=1;
for(j=1;j<=n;j++){
if(arr[j].e>=e && arr[j].s<=s) lst.pb(j);
}
p=e-s;
y=lst.size();
for(j=0;j<y;j++) t[j]=(p*sum[lst[j]-1]+(j?t[j-1]:0))%mod;
for(j=2;j<=y && j<=p;j++){
for(k=y-1;k>=j-1;k--) t[k]=(t[k]+(t[k-1]*(p-j+1))%mod*inv[j])%mod;
for(k=0;k<y;k++) t[k]=(t[k]+(j?t[k-1]:0))%mod;
}
for(j=y-1;j>=0;j--) t[j]=(t[j]+mod-(j?t[j-1]:0))%mod;
x=0;
sum[0]=1;
for(j=1;j<=n;j++){
if(x!=y && lst[x]==j){
ss[j]=(ss[j]+t[x])%mod;
x++;
}
sum[j]=(sum[j-1]+ss[j])%mod;
}
}
printf("%lld\n",(sum[n]-1+mod)%mod);
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... |