답안 #1027746

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1027746 2024-07-19T09:35:30 Z DangerNoodle7591 Trampoline (info1cup20_trampoline) C++17
30 / 100
2000 ms 67604 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 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];
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;
}
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});
	}
	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);
	}
	/*for(int i=0;i<(int)ikinci.size();i++){
		int a,b,c;tie(a,b,c)=bfs[i];
		cout<<a<<" "<<b<<" "<<c<<endl;
	}*/
	int q;cin>>q;
	while(q--){
		qua();
	}


}


signed main(){
	lalala;
	solve();
	
}

Compilation message

trampoline.cpp: In function 'void dfs(long long int, long long int, long long int)':
trampoline.cpp:38:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |  if(yer!=adj[kim].size()){
      |     ~~~^~~~~~~~~~~~~~~~~
trampoline.cpp: In function 'void qua()':
trampoline.cpp:71:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |  if(kim==comprez.size()||comprez[kim]!=x){
      |     ~~~^~~~~~~~~~~~~~~~
trampoline.cpp:76:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |  if(yer==adj[kim].size()){
      |     ~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2088 ms 16596 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2052 ms 43792 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 277 ms 46204 KB 200000 token(s): yes count is 110486, no count is 89514
2 Correct 261 ms 46356 KB 200000 token(s): yes count is 114664, no count is 85336
3 Correct 288 ms 45696 KB 200000 token(s): yes count is 86232, no count is 113768
4 Correct 311 ms 45948 KB 200000 token(s): yes count is 94603, no count is 105397
5 Correct 309 ms 46464 KB 200000 token(s): yes count is 94148, no count is 105852
6 Correct 325 ms 64640 KB 200000 token(s): yes count is 97163, no count is 102837
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 16476 KB 5000 token(s): yes count is 3238, no count is 1762
2 Correct 11 ms 16464 KB 5000 token(s): yes count is 3837, no count is 1163
3 Correct 9 ms 16476 KB 5000 token(s): yes count is 4104, no count is 896
4 Correct 11 ms 16404 KB 5000 token(s): yes count is 3934, no count is 1066
5 Correct 19 ms 16820 KB 5000 token(s): yes count is 3384, no count is 1616
6 Correct 11 ms 16476 KB 5000 token(s): yes count is 3390, no count is 1610
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2079 ms 67604 KB Time limit exceeded
2 Halted 0 ms 0 KB -