AC了,但有疑问
查看原帖
AC了,但有疑问
1268907
uncle_steve楼主2025/6/16 17:12

为什么这样是WA 0pts:

#include<bits/stdc++.h>
using namespace std;
set<int>s;
int n,x,y;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		if(x==1){
			if(s.find(y)==s.end()) s.insert(y);
			else cout<<"Already Exist"<<endl;
		} 
		else if(x==2){
			if(s.empty()) cout<<"Empty"<<endl;
			else if(s.find(y)!=s.end()){
				cout<<y<<endl;
				s.erase(y);
			}
			else{
				set<int>::iterator it=s.lower_bound(y),it2;
				if(it!=s.begin()) it2=it--;
				if(it!=s.begin()){
					if(abs(*it2-y)<=abs(*it-y)){
						cout<<*it2<<endl;
						s.erase(it2);
					} 
					else{
						cout<<*it<<endl;
						s.erase(it);
					} 
				}
				else{
					cout<<*it<<endl;
					s.erase(it);
				}
			}
		}
	}
	
	return 0;
}

而这样就是AC 100pts:

#include<bits/stdc++.h>
using namespace std;
set<int>s;
int n,x,y;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		if(x==1){
			if(s.find(y)==s.end()) s.insert(y);
			else cout<<"Already Exist"<<endl;
		} 
		else if(x==2){
			if(s.empty()) cout<<"Empty"<<endl;
			else if(s.find(y)!=s.end()){
				cout<<y<<endl;
				s.erase(y);
			}
			else{
				set<int>::iterator it=s.lower_bound(y),it2=it;
				if(it!=s.begin()){
					it2--;
					if(abs(*it2-y)<=abs(*it-y)){
						cout<<*it2<<endl;
						s.erase(it2);
					} 
					else{
						cout<<*it<<endl;
						s.erase(it);
					} 
				}
				else{
					cout<<*it<<endl;
					s.erase(it);
				}
			}
		}
	}
	
	return 0;
}

中间就改了一个指针修改方式,求这样的原因是什么?

2025/6/16 17:12
加载中...