답안 #268704

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
268704 2020-08-16T19:16:25 Z test2 Boat (APIO16_boat) C++14
0 / 100
79 ms 74232 KB
#include<bits/stdc++.h>

#define I inline void 

using ll = long long ; 
using ld = long double ; 

using namespace std ; 

const int N = 2000 + 7 , mod = 1e9 + 7 ; 

// how interesting!

int n; 

ll ans ; 
map<int , int > used ; 
vector<pair<int , int> > st ; 
vector<pair<int , int> > v ; 

I add(int u , int v){
	while(u <=v && used[u])u++ ; 
	while(v>=u&&used[v])v-- ; 

	if(u <=v){
		used[u] = used[v] = 1; 
		st.push_back({u , v}) ; 
	}
}

vector<int> onepiece[N * 100] ; 

ll dp[N][N] ; 

ll mul(ll a , ll b){
	return (1ll * a * b) %mod ; 
}

ll solve(int i , int j){
	if(dp[i][j]!=-1)
		return dp[i][j] ; 
	if(i == (int) st.size())
		return 1; 
	ll ret = solve(i+1 , j ) ; 

	for(auto u : onepiece[i]){
		if(u > j){
			ll add = mul(st[i].second - st[i].first +1ll , solve(i+1,  u) ) ; 
			ret = (ret + add) %mod  ; 
		}
	}
	return dp[i][j] = ret ; 
}

ll conts[N] ; 

int main(){	
	ios_base::sync_with_stdio(0) ; 
	cin.tie(0) ; 
	memset(dp , -1 , sizeof dp) ; 
	srand(time(0)) ; 
	//freopen("in.in" , "r" , stdin) ;  
	cin >> n; 
	set<int> ev ; 

	for(int i = 0 ;i < n;i++){
		int x , y ; 
		cin >> x >> y ; 
		ev.insert(x) ; 
		ev.insert(y) ; 
		used[x] = used[y] = 1; 
		st.push_back({x , x}) ; 
		st.push_back({y , y}) ;
		//for(int j =x ;j <= y ;j ++)
		//	st.push_back({j , j})  ; 
		v.push_back({x , y}) ; 
	}
	
	int l = 0 ; 
	for(auto u : ev){
		if(l){
			add(l+1 , u - 1) ; 
		}
		l = u ; 
	}

	st.resize( unique(st.begin() , st.end()) - st.begin()) ; 

	for(int i = 0 ;i < (int) st.size() ; i++){

		for(int j = 0 ;j < n; j++){
			if( st[i].first>= v[j].first && st[i].second <= v[j].second ){
				onepiece[i].push_back(j + 1) ; 
				conts[j] += st[i].second - st[i].first + 1 ; 
			}
		}
	}

	for(int i = 0 ;i < n;i++){
		//assert((conts[i] == v[i].second - v[i].first + 1)) ; 
	}
	
	for(int i = 1 ;i < (int) st.size() ;i ++){
		assert( st[i].first > st[i-1].second ) ; 
		assert(st[i].first <= st[i].second) ; 
	}

	cout<< (mod + solve(0 ,  0 ) -1 ) %mod ; 
	return 0 ; 
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 74 ms 74232 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 74 ms 74232 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 79 ms 74220 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 74 ms 74232 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -