A. Question Marks
题意
就是给你一个数n和一个字符串,字符串中只有ABCD四种字符,求不超过n各种字符的和
思路
直接模拟一遍就行了
代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
signed main()
{
IOS
int T=1;
cin>>T;
while(T--)
{
int n,a=0,b=0,c=0,d=0,sum=0;
cin>>n;
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]=='A')
a++;
if(s[i]=='B')
b++;
if(s[i]=='C')
c++;
if(s[i]=='D')
d++;
}
sum+=min(n,a);
sum+=min(n,b);
sum+=min(n,c);
sum+=min(n,d);
cout<<sum<<endl;
}
return 0;
}
B. Parity and Sum
题意
给你一个数组,里面可能有奇数和偶数,您可以选择任意一对 (i,j)索引,然后将较小的索引替换为它们的和,求找出使数组的所有元素具有相同奇偶性所需的最小操作数。
思路
如果数组直接是全奇数或全偶数就输出0,反之就把所有的偶数变成奇数,因为奇数加偶数等于技术但偶数加偶数还等于偶数,所以先求出最大的奇数再与比它小的偶数相加,操作数加1,如果偶数比奇数大,就让奇数加最大的偶数再进行操作,操作数加2
代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int a[200100];
signed main()
{
IOS
int T=1;
cin>>T;
while(T--)
{
vector<int>v;
int n,x=0,y=0,ma=0,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]%2==0)
{
x++;
v.push_back(a[i]);
}
else
{
y++;
if(a[i]>ma)
ma=a[i];
}
}
sort(v.begin(),v.end());
if(x==0||y==0)
{
cout<<0<<endl;
continue;
}
int t=v.size();
for(int i=0;i<t;i++)
{
if(ma>v[i])
{
ma+=v[i];
sum++;
}
else
{
ma+=v[t-1];
ma+=v[t-1];
t--;
sum+=2;
i--;
}
//cout<<ma<<"AAA"<<endl;
}
cout<<sum<<endl;
}
return 0;
}
C. Light Switches
题意
n个灯,每k次变化一次开关状态。每个灯从a[i],开始变化。输出最快什么时候全亮,反则不存在-1。
思路
可以先找到第一次亮灯最大的时候,让其他亮灯的时候加n个2k使与第一次亮灯最大的时候最接近,然后再排序,如果最大值减最小值大于等于k就输出-1,反之输出最大值
代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int a[200100];
signed main()
{
IOS
int T=1;
cin>>T;
while(T--)
{
int n,k;
cin>>n>>k;
int mod=2*k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
if(a[n]-a[i]>=k)
{
int t;
if((a[n]-a[i])%mod==0||(a[n]-a[i])%mod<k)
a[i]=a[i]+(a[n]-a[i])/mod*mod;
else
a[i]=a[i]+(a[n]-a[i])/mod*mod+mod;
}
}
sort(a+1,a+1+n);
if(a[n]-a[1]>=k)
cout<<-1<<endl;
else
cout<<a[n]<<endl;
}
return 0;
}