B - Ohana Cleans Up
错误:
自以为擦掉0多的列就ok了。
#include<bits/stdc++.h> using namespace std; int colum[105]={0}; int main() { char str[105][105],str1[105][105]; int n,sum; int ans1=0,ans2=0,ans3=0; cin>>n; for(int i=0; i<n; i++) { sum=0; for(int j=0; j<n; j++) { cin>>str[i][j]; str1[i][j]=str[i][j]; if(str[i][j]=='0') colum[j]++; if(str1[i][j]=='1') sum++; } if(sum==n) ans3++; } for(int i=0; i<n; i++) { sum=0; for(int j=0; j<n; j++) { if(colum[j]>n/2) { if(str[i][j]=='0') str[i][j]='1'; else str[i][j]='0'; } if(str[i][j]=='1') sum++; } if(sum==n) ans1++; } if(n%2==0) { for(int i=0; i<n; i++) { sum=0; for(int j=0; j<n; j++) { if(colum[j]>=n/2) { if(str1[i][j]=='0') str1[i][j]='1'; else str1[i][j]='0'; } if(str1[i][j]=='1') sum++; } if(sum==n) ans2++; } } int flag=0; for(int i=0;i<n;i++) if(colum[i]!=n-1) flag=1; if(!flag) cout<<1<<endl; else cout<<max(ans3,max(ans1,ans2))<<endl; return 0; }
正确:
找出公共擦掉的列的最大值
#include<bits/stdc++.h> using namespace std; vector<int>row[105]; int main() { char mmp[105][105]; int n,sum,ans=0,flag; cin>>n; for(int i=0; i<n; i++) { sum=0; for(int j=0; j<n; j++) { cin>>mmp[i][j]; if(mmp[i][j]=='1') sum++; } if(sum==n) ans++; } for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(mmp[i][j]=='0') row[i].push_back(j); for(int i=0; i<n; i++) { sum=0; for(int j=0; j<n; j++) { flag=0; if(row[i].size()==row[j].size()) { flag=1; int temp=row[i].size(); for(int k=0; k<temp; k++) if(row[i][k]!=row[j][k]) flag=0; } if(flag) sum++; } ans=max(ans,sum); } cout<<ans<<endl; return 0; }