社区讨论

如何卡常(昨天ABC T4)

学术版参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@milacfdl
此快照首次捕获于
2025/11/30 13:34
3 个月前
此快照最后确认于
2025/12/02 20:45
3 个月前
查看原帖
昨天的ABC T4,T掉了40%的点,自己写的实在是太屎山了
Code:
CPP
#include <bits/stdc++.h>
using namespace std;
int n,u,d,l,r,c[200005],z;
unordered_set<int> a[2005][2005],t[2005],b;
int main(){
//	freopen("114.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>u>>d>>l>>r;
		a[u][l].insert(i);
		a[u][r+1].insert(i);
		a[d+1][l].insert(i);
		a[d+1][r+1].insert(i);
//		for(int j=1;j<=7;j++)b[j].clear();
//		for(int u=1;u<=7;u++){
//			for(int j=1;j<=7;j++){
//				for(auto k:a[u][j]){
//					auto it=b[j].find(k);
//					if(it==b[j].end())b[j].insert(k);
//					else b[j].erase(it);
//				}
//				for(auto k:b[j-1]){
//					auto it=b[j].find(k);
//					if(it==b[j].end())b[j].insert(k);
//					else b[j].erase(it);
//				}
//				for(auto k:b[j])cout<<k;
//				cout<<"\t";
//			}
//			cout<<endl;
//		}
	}
	for(int i=1;i<=2000;i++){
		b.clear();
		for(int j=1;j<=2000;j++){
			for(auto k:a[i][j]){
				auto it=t[j].find(k);
				if(it==t[j].end())t[j].insert(k);
				else t[j].erase(it);
			}
			for(auto k:t[j]){
				auto it=b.find(k);
				if(it==b.end())b.insert(k);
				else b.erase(it);
			}
			if(b.size()==0)z++;
			else if(b.size()==1)c[*(b.begin())]++;
		}
	}
	for(int i=1;i<=n;i++){
		cout<<z+c[i]<<endl;
	}
}

回复

5 条回复,欢迎继续交流。

正在加载回复...