bool ck(string s){
map<char,int>v;
for(int i=0;i<s.size();i++){
v[s[i]]++;
}
int k=0;
for(auto i:v){
if(i.second%2==1)k++;
}
if(k>=2)return 0;
return 1;
}
题源ICPC辽宁省赛《最长回文串》
整题代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int maxn=1e5+10;
const int INF= 0x3f3f3f;
const ll LINF=0x3f3f3f3f3f3f3f3f;
map<string,int> mp;
bool ck(string s){
map<char,int>v;
for(int i=0;i<s.size();i++){
v[s[i]]++;
}
int k=0;
for(auto i:v){
if(i.second%2==1)k++;
}
if(k>=2)return 0;
return 1;
}
int main(){
#ifdef MPDFDFL
freopen("D:/input.txt","r",stdin);
#endif
int n,m;
cin>>n>>m;
while(n--){
string s;
cin>>s;
sort(s.begin(),s.end());
mp[s]++;
}
int res=0;
int ma=0;
for(auto i:mp){
if(i.second%2==0)res+=i.second*m;
else {
if(ck(i.first))ma=max(ma,i.second);
else res+= (i.second-1)*m;
}
}
cout<<res+ma*m;
return 0;
}