Submission #1303000

#TimeUsernameProblemLanguageResultExecution timeMemory
1303000Muhammad_AneeqBuilding Skyscrapers (CEOI19_skyscrapers)C++20
8 / 100
315 ms16264 KiB
#include <bits/stdc++.h>
using namespace std;
map<pair<int,int>,bool>scr;
bool check(int x,int y)
{
	int ans=0;
	for (int i=-1;i<=1;i++)
	{
		for (int j=-1;j<=1;j++)
		{
			if (i!=0&&j!=0) continue;
			if (i==0&&j==0) continue;
			pair<int,int>f={x+i,y+j};
			if (scr.find(f)==scr.end())
				ans++;
		}
	}
	return (ans<=1);
}
inline void solve()
{
	int n,t;
	cin>>n>>t;
	int r[n],c[n];
	map<pair<int,int>,int>pre,ind;
	for (int i=0;i<n;i++)
	{
		cin>>r[i]>>c[i];
		pre[{r[i],c[i]}]=1;
		ind[{r[i],c[i]}]=i+1;
	}
	pair<int,int>cur={r[0],c[0]};
	vector<int>ans;
	set<pair<int,pair<int,int>>>S,pri;
	S.insert({ind[cur],cur});
	while (S.size()||pri.size())
	{
		pair<int,pair<int,int>>ft;
		if (pri.size())
		{
			ft=*begin(pri);
			pri.erase(ft);
		}
		else
		{
			ft=*begin(S);
			S.erase(ft);
		}
		pair<int,int>g=ft.second;
		if (pre[g]==0) continue;
		pre[g]=0;
		scr[g]=1;
		ans.push_back(ft.first);
		for (int i=-1;i<=1;i++)
		{
			for (int j=-1;j<=1;j++)
			{
				pair<int,int>f={g.first+i,g.second+j};
				if (pre[f])
				{
					if (check(f.first,f.second))
						pri.insert({ind[f],f});
					else
						S.insert({ind[f],f});
				}
			}
		}
	}
	if (ans.size()!=n)
	{
		cout<<"NO\n";return;
	}
	cout<<"YES\n";
	for (auto i:ans)
		cout<<i<<'\n';
}
int main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...