专栏文章

题解:CF1184C1 Heidi and the Turing Test (Easy)

CF1184C1题解参与者 15已保存评论 16

文章操作

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

当前评论
16 条
当前快照
1 份
快照标识符
@miqiysyf
此快照首次捕获于
2025/12/04 05:34
3 个月前
此快照最后确认于
2025/12/04 05:34
3 个月前
查看原文

思路

我们首先需要求出 44 条边。但是如果用普通的算法来算了话,如果特殊的点在正方形外,就会错误。
于是乎我们观察题面,可以得知每条边至少有 nn 个点(英文原版有,洛谷翻译没有)。
其实我们也用不到这个特殊性质,因为正方形有 44 个顶点,这样每条边上就至少有 22 个点,而特殊点的边上(如果不与其它边重叠,重叠了话我们可以省略,已经找到边了)只有 11 个点。
所以我们可以用一个桶来记录边上有多少个点,然后枚举边,如果边上点数大于 11 了话,那这条边就是正方形的一条边。
最后再枚举每个点是否在边上。

代码

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x[45],y[45],minx=INT_MAX,maxx=INT_MIN,miny=INT_MAX,maxy=INT_MIN,i,j,hx[55],hy[55];
signed main()
{
	cin>>n;
	for(i=1;i<=4*n+1;i++)
	{
		cin>>x[i]>>y[i];
		hx[x[i]]++;
		hy[y[i]]++;
	}
	for(i=0;i<=50;i++)
	{
		if(hx[i]>1)
		{
			minx=min(minx,i);
			maxx=max(maxx,i);
		}
	}
	for(i=0;i<=50;i++)
	{
		if(hy[i]>1)
		{
			miny=min(miny,i);
			maxy=max(maxy,i);
		}
	}
	for(i=1;i<=4*n+1;i++)
	{
		if((x[i]<minx||x[i]>maxx)||(y[i]<miny||y[i]>maxy||(y[i]>miny&&y[i]<maxy&&(x[i]>minx&&x[i]<maxx))))
		{
			cout<<x[i]<<" "<<y[i];
			break;
		}
	}
	return 0;
}

评论

16 条评论,欢迎与作者交流。

正在加载评论...