https://vjudge.net/problem/CodeForces-1251Bios
n个01串,能够任意交换任意两个字符串的字符任意次,问最多能有多少个回文串。c++
分类讨论能够发现规律:spa
当串长度l为奇数,插入任意<=l个1均可以;.net
当串长度l为偶数,插入偶数个1才行。blog
因此对于每一个串,均可以插入偶数个1,当1的个数为奇数时,说明必须有一个奇数串,若是没有那么确定有一个串不回文(1的个数为奇数的偶数长度的串)。ci
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define ll long long const int N=200005; const int mod=1e9+7; const double eps=1e-8; const double PI = acos(-1.0); #define lowbit(x) (x&(-x)) int main() { std::ios::sync_with_stdio(false); int t; cin>>t; while(t--) { int n; cin>>n; int sum=0,cnt=0; for(int i=0;i<n;i++) { string s; cin>>s; int l=s.length(); for(int i=0;i<l;i++) { if(s[i]=='1') sum++; } if(l&1) cnt++; } if(sum%2==0||(sum%2==1&&cnt>0)) cout<<n<<endl; else cout<<n-1<<endl; } return 0; }