思路
直接%3这样相差最小,剩1就是一元硬币,剩2就是两元硬币
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,x;
cin>>t;
while(t--)
{
cin>>x;
if(x%3==0)cout<<x/3<<" "<<x/3<<endl;
else if(x%3==1)cout<<x/3+1<<" "<<x/3<<endl;
else cout<<x/3<<" "<<x/3+1<<endl;
}
return 0;
}
思路
每个字母每种颜色不能涂两次说明一个字母最多涂两次因此可以先减去使每个字母出现最多两次,因为红绿要相等,所以减去后如果是奇数那么多的一个不涂颜色就好了,因此红色数量就等于sum/2;
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,len,temp;
string s;
cin>>t;
while(t--)
{
cin>>s;len=s.size();temp=0;
map<char,int>a;
for(int i=0;i<len;i++)
{
a[s[i]]++;
if(a[s[i]]>=3)temp++;
}
cout<<(len-temp)/2<<endl;
}
return 0;
}