A. Question Marks
思路:用一个map统计a,b,c,d的出现次数,然后在最后计算总分的时候只需要去看,当前选项的出现次数和n去最小值即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
int t;
int n;
int a[200005];
string s;
signed main()
{
cin>>t;
while(t--)
{
map<char,int>mp;
cin>>n;
cin>>s;
for(int i=0;i<s.size();i++)
{
mp[s[i]]++;
}
int sum=min(n,mp['A'])+min(n,mp['B'])+min(n,mp['C'])+min(n,mp['D']);
cout<<sum<<"\n";
}
return 0;
}
B. Parity and Sum
思路:我们会发现,经过上述的操作,产生的结果一定是一个奇数,因此,我们 我们可以知道,要是一开始奇偶性就是相同的话,那么操作次数为0,否则,我们就选取最大的奇数和最大的偶数,然后遍历数组,最大的奇数在遍历偶数的时候顺便要进行累加,然后碰到比它大的数,就相当于让他先去加上最大的偶数(最大奇数+最大偶数,一定是最大的)这种情况计数+2即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
int t;
int n;
int a[200005];
int maxn;//最大奇数
int ou;//最大的偶数
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
maxn=0;
int cnt=0;
int cnt1=0,cnt2=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]%2==1)
{
maxn=max(maxn,a[i]);
cnt1++;
}
else
{
ou=max(ou,a[i]);
cnt2++;
}
}
if(maxn==0)
{
cout<<0<<'\n';
continue;
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
if(a[i]%2==0&&maxn>a[i])
{
maxn+=a[i];
cnt++;
}
else if(a[i]%2==0)
{
if(maxn<=a[i])
{
cnt+=2;maxn+=ou;
}
}
}
cout<<cnt<<"\n";
}
return 0;
}
C. Light Switches
思路:一个纯模拟题目吧,感觉不涉及数学的啥东西,如果说涉及,那我觉得就是计算,都是小学的计算方式
我们先将其亮灯时间进行排序,找到最晚一个开灯的
我们只需要现将最后一个灯泡的第一次的亮灯区间假设为整体的亮灯区间,因为后续无论经历多少了时间,其都是相同的,所以只需要考虑第一个亮灯区间
也就是a[n]~a[n]+k-1这个区间,然后我们从前到后去遍历,除了最后一个灯泡,然后我们给其都通过加2*k这种一整个区间,使其能够和最后一个灯泡的区间有重叠部分,然后左区间选最大,右区间选最小,如果左区间>右区间,那就证明肯定不可能同时开了,输出-1,否则直接输出左边界即可
#include <bits/stdc++.h>
using namespace std;
int t;
int n, k;
int a[200005];
#define int long long
#define pb push_back
int Max(int a,int b)
{
return a>b?a:b;
}
int Min(int a,int b)
{
return a<b?a:b;
}
void put(int l,int r)
{
if (l <= r)
{
cout<<l<<"\n";
}
else
{
cout<<-1<<"\n";
}
}
void solve()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin>>a[i];
sort(a+1,a+n+1);
int l=a[n],r=a[n]+k-1;
for (int i=1;i<n;i++)
{
a[i]+= (a[n] - a[i])/(2 * k)*(2 * k);
if (a[i]+k <l+1)
{
a[i] += k<<1;
}
l = Max(l, a[i]);
r = Min(r, a[i]+k-1);
}
put(l,r);
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while (t--)
{
solve();
}
return 0;
}