I题
思路:这是一个签到题比较简单,只要判断出字符串中出现最多的字符,然后再让字符总数减去就行了
代码如下
//I
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int t;
signed main()
{
IOS
cin>>t;
while(t--)
{
map<int,int>m;
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
m[s[i]-'a']++;
}
int ma=-1e9,t;
for(int i=0;i<=25;i++)
{
if(m[i]>ma)
{
ma=m[i];
t=i;
}
}
cout<<s.size()-m[t]<<endl;
}
return 0;
}
G题
思路:这个题是个贪心题,就是但你遇见0时最好把它变成-1,可以使最后攻击力最大,我们可以当数量大于1时,遇见0就把0变成-1,当数量等于1时遇见-1可以吧0变成-1的反悔成0变成1的就行了
代码如下
//G
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int t,a,b,c,n,x,f;
signed main()
{
IOS
cin>>t;
while(t--)
{
a=1,b=1,c=0,f=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
if(x==1)
{
a++,b++;
}
else if(x==-1)
{
if(a>1)a--;
else if(c>=1)c--,b++,a++;
else f=1;
}
else
{
if(a>1)a--,c++;
else
a++,b++;
}
}
if(f)
{
cout<<-1<<endl;
continue;
}
cout<<b/__gcd(a,b)<<" "<<a/__gcd(a,b)<<endl;
}
return 0;
}