NC26150. A. 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; }