Description du problème
Étant donné une chaîne non vide S, divisée en N+1 sous-chaînes par N tirets '-', et un entier positif K. On demande de reformer les sous-chaînes en groupent les caractères par paquets de K à partir de la deuxième sous-chaîne, séparés par des tirets.
Pour chaque nouvelle sous-chaîne ainsi formée, si elle contient plus de lettres minuscules que de majuscules, toutes les majuscules sont converties en minuscules ;
inversement, si elle contient plus de majuscules que de minuscules, toutes les minuscules sont converties en majuscules ; si le nombre est égal, aucune conversion n'est effectuée.
Entrée
Deux lignes : la première contient l'entier K, la seconde contient la chaîne S.
Sortie
La chaîne transformée après application des règles.
Exemple 1
Entrée
3
12abc-abCABc-4aB@
Sortie
12abc-abc-ABC-4aB-@
#include <bits/stdc++.h>
using namespace std;
// #define endl '\n'
#define int long long
#define fastio \
ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL);
#pragma GCC optimize(3)
typedef pair<int, int> pii;
const double pi = acos(-1);
const int M = 2e5+ 10;
const int mod = 1e9+7;
const int inf = 1e9 + 5;
const int INF = (1ll << 32);
// Écrit de manière brouillon
string transform1(string s){
string str="";
for(auto c:s){
if(isupper(c))c=tolower(c);
str+=c;
}
return str;
}
string transform2(string s){
string str="";
for(auto c:s){
if(islower(c))c=toupper(c);
str+=c;
}
return str;
}
void solve()
{
int k;cin>>k;
string s;cin>>s;string s1="";
vector<string>res;
int f=0;
for(int i=0;i<s.size();i++){
while(s[i]!='-'){
s1=s1+s[i];
i++;
}
res.push_back(s1);
s = s.substr(i+1);
break;
}
int num=0,low=0,high=0;
s1="";
for(int i=0;i<s.size();i++){
if(s[i]!='-'){
if(num==k){
if(low>high)res.push_back(transform1(s1));
else if(low<high) res.push_back(transform2(s1));
else res.push_back(s1);
low=0;high=0;
s1="";num=0;
}
s1=s1+s[i];num++;
if(s[i]>='a'&&s[i]<='z')low++;
if(s[i]>='A'&&s[i]<='Z') high++;
}
}
if(!s1.empty()){
if(low>high)res.push_back(transform1(s1));
else if(low<high) res.push_back(transform2(s1));
else res.push_back(s1);
}
for(int i=0;i<res.size();i++){
if(i==res.size()-1)cout<<res[i];
else cout<<res[i]<<"-";
}
}
signed main()
{
fastio
int T = 1;
// cin >> T;
// cout<<fixed<<setprecision(10);
while (T--)
{
solve();
}
return 0;
}