列表

详情


NC26150. A. Good 的集合

描述

平面上给 个点,保证不存在 3 点共线,保证这些点两两不重合,对于一个点集 S ,如果从 S 中任意选出三个不同的点,构成的三角形重心都不是整点(横坐标,纵坐标都是整数的点,称为整点),那么这个点集是  good 的,输出最大的 good 的点集大小。(注:所有点数小于等于 2 的点集都是 good 的)。

输入描述

第一行,一个整数 ,表示 n 个点,之后 n 行,每行两个整数 .

输出描述

输出一个正整数表示答案。

示例1

输入:

4
0 0
0 1
1 0
1 1

输出:

4

示例2

输入:

3
0 0
1 2
2 1

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 488K, 提交时间: 2020-03-04 22:00:30

#include<bits/stdc++.h>
using namespace std;
int cnt[4][4];
struct node
{
	int x,y;
};
int check(int state)
{
	vector<node> vec;
	int num=0,ans=0;
	for(int i=0;i<=2;i++)
	{
		for(int j=0;j<=2;j++)
		{
			if((state>>num)&1)
			{
				node temp;
				temp.x=i;temp.y=j;
				vec.push_back(temp);
				ans=ans+min(2,cnt[i][j]);
			}
			num++;
		}
	}
	int sz=vec.size();
	int _x,_y;
	for(int i=0;i<sz;i++)
	{
		for(int j=i+1;j<sz;j++)
		{
			for(int k=j+1;k<sz;k++)
			{
				_x=vec[i].x+vec[j].x+vec[k].x;
				_y=vec[i].y+vec[j].y+vec[k].y;
				if(_x%3==0&&_y%3==0)
					return -1;
			}
		}
	}
	return ans;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		cnt[x%3][y%3]++;
	}
	int ans=0;
	for(int i=0;i<(1<<9);i++)
		ans=max(ans,check(i));
	cout<<ans<<endl;
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 600ms, 内存消耗: 496K, 提交时间: 2023-05-19 18:06:11

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1000000007;
const int N=1e5+10;
int a[N],b[N];
int c[4][4];
int sum;
int n;
bool check(int x)
{
	for(int i=0;i<=x;i++)
	{
		for(int j=i+1;j<=x;j++)
		{
			for(int k=j+1;k<=x;k++)
			{
				int p=a[i]+a[j]+a[k];
				int q=b[i]+b[j]+b[k];
				if(p%3==0&&q%3==0) return 0;
			}	
		}
	}
	return 1;
}
void dfs(int x)
{
	sum=max(sum,x);
	if(x>n)  return;
	for(int i=0;i<=2;i++)
	{
		for(int j=0;j<=2;j++)
		{
			a[x]=i,b[x]=j;
			if(c[i][j])
			{
				if(check(x))
				{
				c[i][j]--;
				dfs(x+1);
				c[i][j]++;
				}
			}
		}
	}
}
signed main()
{
	
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x,y;
		cin>>x>>y;
		c[x%3][y%3]++;
	}
	dfs(0);
	cout<<sum<<endl;
	
	return 0;
}

上一题