C. Removal of Unattractive Pairs

发布时间 2023-12-10 21:35:27作者: 黑屿白

这道题很考验思维。

这道题目我们只需要考虑出现次数最多的字符的个数,分两种情况讨论。

1、如果该字符出现次数超过n/2(这里设为x),那么其他字符和该字符凑成一对进行消除,即剩下的长度为2x-n。

2、如果该字符出现次数低于n/2,那么对于任意字符都有足够的其余字符和他凑成一对进行消除,那么就变成了长度问题。

这种情况下:当总字符串长度为奇数时,两两消除最终会剩下一个;当总字符串长度为偶数时,两两消除最终剩下空串。

主要代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while (t--){
        int n,max=0;
        cin>>n;
        cin.get();
        map<char,int> map1;
        for (int i=0;i<n;i++){map1[getchar()]++;}
        for (map<char,int>::iterator i=map1.begin();i!=map1.end();i++)
            if ((i->second)>max) max=i->second;
        if (max<=n/2) printf("%d\n",n%2);
        else printf("%d\n",2*max-n);
    }
    return 0;
}