답안 #1027813

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1027813 2024-07-19T10:19:09 Z vjudge1 Trampoline (info1cup20_trampoline) C++17
컴파일 오류
0 ms 0 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 2530
    #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];
    bool 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==(int)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;
    }
    inline bool ancakama(int x,int y,int a,int b,int r,int c){
		queue<pair<int,int>> q;
		q.p({x,y});
		if(x>a)return 0;
		if(y>b)return 0;
		if(x==a)return 1;
		while((int)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>b)continue;
			if(x>a)continue;
			if(x!=r&&arr[x+1][y]==0&&green[x][y]){
				q.p({x+1,y});
				continue;
			}

			if(y!=c&&arr[x][y+1]==0){
				q.p({x,y+1});
			}
		}
		return 0;
	}
    void yaaap(vector<pair<int,int>> v, int n,int q,int r,int c){
    	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=dfs(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<=4000&&r<=offf-10&&c<=offf-10){
    		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: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()){
      |         ~~~^~~~~~~~~~~~~~~~~
trampoline.cpp: In function 'void yaaap(std::vector<std::pair<int, int> >, int, int, int, int)':
trampoline.cpp:121:26: error: too many arguments to function 'void dfs(int, int, int)'
  121 |    int ok=dfs(x,y,a,b,r,c);
      |                          ^
trampoline.cpp:24:10: note: declared here
   24 |     void dfs(int x,int a,int b){
      |          ^~~
trampoline.cpp:121:14: error: void value not ignored as it ought to be
  121 |    int ok=dfs(x,y,a,b,r,c);
      |           ~~~^~~~~~~~~~~~~