답안 #1027793

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1027793 2024-07-19T09:59:23 Z vjudge1 Trampoline (info1cup20_trampoline) C++17
53 / 100
2000 ms 47004 KB
    #include<bits/stdc++.h>
    using namespace std;
    #define lalala ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    #define ll long long
   // #define int long long int
    #define endl '\n'
    #define N 600100
    #define M 400100
    #define offf 210
    #define big 2147483647 
    #define bigg 9223372036854775807 
    #define pb push_back
    #define p push
    #define ins insert
    #define f first
    #define s second
     
    tuple<int,int,int> bfs[M];
     
    vector<int> adj[N], comprez;
    vector<pair<int,int>> ikinci;
    int gittik[M];
    int arr[offf][offf],green[offf][offf];
    void dfs(int x,int a,int b){
    	if(x==-1)return;
    	if(gittik[x])return ;
    	gittik[x]=1;
    	pair<int,int> pa={a+1,b};
     
    	int yeni=(upper_bound(ikinci.begin(),ikinci.end(),pa)-ikinci.begin())-1;
    	if(ikinci[yeni].f==a+1&&ikinci[yeni].s==b&&gittik[yeni]==0){
    		bfs[x]={yeni,a+1,b};
    		dfs(yeni,a+1,b);
    		return;
    	}
     
    	int kim=(lower_bound(comprez.begin(),comprez.end(),a)-comprez.begin());
    	int yer=(lower_bound(adj[kim].begin(),adj[kim].end(),b)-adj[kim].begin());
     
    	if(yer!=adj[kim].size()){
    		pa={a,adj[kim][yer]};
    		yeni=(upper_bound(ikinci.begin(),ikinci.end(),pa)-ikinci.begin())-1;
    		bfs[x]={yeni,a,adj[kim][yer]};
    		dfs(yeni,a,adj[kim][yer]);
    		return;
    	}
    	bfs[x]={-1,-1,-1};
    }
     
    int defese(int x,int a,int b,int s,int e){
    	if(a>s||b>e)return 0;
    	if(a==s){
    		return 1;
    	}
     
    	int aa,bb,cc;tie(aa,bb,cc)=bfs[x];
    	if(a==-1)return 0;
    	return defese(aa,bb,cc,s,e);
    }
    void qua(){
    	int x,y,a,b;cin>>x>>y>>a>>b;
    	if(x==a){
    		if(y<=b)cout<<"Yes"<<endl;
    		else cout<<"No"<<endl;
    		return;
    	}
    	if(x>a||y>b){
    		cout<<"No"<<endl;
    		return;
    	}
     
    	int kim=(lower_bound(comprez.begin(),comprez.end(),x)-comprez.begin());
    	if(kim==comprez.size()||comprez[kim]!=x){
    		cout<<"No"<<endl;
    		return;
    	}
    	int yer=(lower_bound(adj[kim].begin(),adj[kim].end(),y)-adj[kim].begin());
    	if(yer==adj[kim].size()){
    		cout<<"No"<<endl;
    		return;
    	}
     
    	pair<int,int> pa={x,adj[kim][yer]};
    	int yeni=(upper_bound(ikinci.begin(),ikinci.end(),pa)-ikinci.begin())-1;
    	int ok=defese(yeni,x,adj[kim][yer],a,b);
    	if(ok)cout<<"Yes"<<endl;
    	else cout<<"No"<<endl;
    }
    int ancakama(int x,int y,int a,int b,int r,int c){
		queue<pair<int,int>> q;
		q.p({x,y});
		while(q.size()){
			x=q.front().f,y=q.front().s;
			q.pop();
			if(arr[x][y])continue;
			arr[x][y]=1;
			if(x==a&&y==b)return 1;
			if(y!=c&&arr[x][y+1]==0){
				q.p({x,y+1});
			}
			if(x!=r&&arr[x+1][y]==0&&green[x][y]){
				q.p({x+1,y});
			}
		}
		return 0;
	}
    void yaaap(vector<pair<int,int>> v, int n,int q,int r,int c){

		memset(green,0,sizeof(green));
    	for(auto u:v){
    		green[u.s][u.f]=1;
    	}
    	while(q--){
			memset(arr,0,sizeof(arr));
			int x,y,a,b;cin>>x>>y>>a>>b;
			int ok=ancakama(x,y,a,b,r,c);
			if(ok)cout<<"Yes"<<endl;
			else cout<<"No"<<endl;
		}
    }
    void solve(){
    	int r,c,n;cin>>r>>c>>n;
    	vector<pair<int,int>> v;
    	ikinci.clear();
    	comprez.clear();
    	vector<int> yedek;
    	for(int i=0;i<n;i++){
    		int a,b;cin>>a>>b;
    		v.pb({b,a});
    		yedek.pb(a);yedek.pb(b);
    		yedek.pb(a+1);
    		ikinci.pb({a,b});
    		ikinci.pb({a+1,b});
    	}
    	int q;cin>>q;
    	if(q<=202&&r<=202&&c<=202){
    		yaaap(v,n,q,r,c);
    		return;
    	}

    	sort(v.begin(),v.end());
    	sort(yedek.begin(),yedek.end());
    	sort(ikinci.begin(),ikinci.end());
    	comprez.pb(yedek[0]);
    	for(int i=1;i<n*3;i++){
    		if(yedek[i]!=yedek[i-1])comprez.pb(yedek[i]);
    		if(i<=n*2+5){
    			gittik[i]=0;
    		}
    		adj[i].clear();
    	}
    	adj[0].clear();
    	gittik[0]=0;
    	for(auto u:v){
    		int yer=u.s;
    		int kim=lower_bound(comprez.begin(),comprez.end(),yer)-comprez.begin();
    		adj[kim].pb(u.f);
    	}
    	for(int i=0;i<(int)ikinci.size();i++){
    		if(gittik[i])continue;
    		dfs(i,ikinci[i].f,ikinci[i].s);
    	}

    	while(q--){
    		qua();
    	}
     
     
    }
     
     
    signed main(){
    	lalala;
    	solve();
    	
    }

Compilation message

trampoline.cpp: In function 'void dfs(int, int, int)':
trampoline.cpp:40:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |      if(yer!=adj[kim].size()){
      |         ~~~^~~~~~~~~~~~~~~~~
trampoline.cpp: In function 'void qua()':
trampoline.cpp:73:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |      if(kim==comprez.size()||comprez[kim]!=x){
      |         ~~~^~~~~~~~~~~~~~~~
trampoline.cpp:78:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |      if(yer==adj[kim].size()){
      |         ~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 17500 KB 200 token(s): yes count is 21, no count is 179
2 Correct 16 ms 17600 KB 200 token(s): yes count is 70, no count is 130
3 Correct 8 ms 17500 KB 197 token(s): yes count is 25, no count is 172
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2024 ms 29340 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 202 ms 31192 KB 200000 token(s): yes count is 110486, no count is 89514
2 Correct 245 ms 30984 KB 200000 token(s): yes count is 114664, no count is 85336
3 Correct 232 ms 30620 KB 200000 token(s): yes count is 86232, no count is 113768
4 Correct 281 ms 31164 KB 200000 token(s): yes count is 94603, no count is 105397
5 Correct 277 ms 30876 KB 200000 token(s): yes count is 94148, no count is 105852
6 Correct 340 ms 44588 KB 200000 token(s): yes count is 97163, no count is 102837
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 17216 KB 5000 token(s): yes count is 3238, no count is 1762
2 Correct 8 ms 16728 KB 5000 token(s): yes count is 3837, no count is 1163
3 Correct 8 ms 17324 KB 5000 token(s): yes count is 4104, no count is 896
4 Correct 8 ms 16568 KB 5000 token(s): yes count is 3934, no count is 1066
5 Correct 17 ms 17540 KB 5000 token(s): yes count is 3384, no count is 1616
6 Correct 7 ms 16772 KB 5000 token(s): yes count is 3390, no count is 1610
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2064 ms 47004 KB Time limit exceeded
2 Halted 0 ms 0 KB -