A. Unit Array
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<math.h>
using namespace std;
int t;
int main()
{
cin>>t;
while(t--)
{
int n=0,cnt=0,sum=0,ans=0;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)
{
if(a[i]==-1)cnt++;
else ans++;
}
for(int i=0;i<=n;i++)
{
if((((cnt-i)*(-1)+(ans+i))>=0)&&((cnt-i)%2==0))
{
cout<<i<<endl;
break;
}
}
}
return 0;
}
1不会减少,只有-1减少,cnt是-1的个数,ans是1的个数,所以当sum>=0 并且改变后的-1的个数为偶数,乘积为1
B. Maximum Strength
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int t;
int main()
{
cin>>t;
while(t--)
{
char a[105];
cin>>a+1;
int n=strlen(a+1);
char b[105];
cin>>b+1;
int ans=n;
int m=strlen(b+1);
if(n==m)
{
for(int i=1;i<=n;i++)
{
if(a[i]!=b[i]){
ans=i;
break;
}
}
int aa=a[ans]-'0';
int bb=b[ans]-'0';
int sum=(n-ans)*9+abs(aa-bb);
cout<<sum<<endl;
}
else {
int sum1=0;
if(n>m)
{
sum1=(n-1)*9;
sum1+=a[1]-'0';
}
else {
sum1=(m-1)*9;
sum1+=b[1]-'0';
}
cout<<sum1<<endl;
}
}
return 0;
}
分为位数相同和位数不同,位数相同时,找到第一个不相同的位数,那么第一个不同的这个位数相减,剩余的乘9,给出答案。另外一种情况,这一种情况也分为两种情况,第一个数大或者第二个数大,位数大的减去1乘9,第一个位数加上,另一种情况也是如此