AtCoder Beginner Contest 083
总结:7分钟三题rank12.。一路挂机终榜rank52,+328分,D题确实想不出来怎么写。。
A题题解:判断a+b和c+d的大小关系即可。
AC代码:
#include<iostream>
using namespace std;
int a,b,c,d;
int main()
{
cin>>a>>b>>c>>d;
if(a+b>c+d)cout<<"Left"<<endl;
else if(a+b==c+d)cout<<"Balanced"<<endl;
else cout<<"Right"<<endl;
}
B题题解:暴力把每个值的数位和求出来即可。
AC代码:
#include<iostream>
using namespace std;
int n,a,b;
int pa(int x)
{
int k = 0;
while(x>0)
{
k+=x%10;
x/=10;
}
if(k>=a&&k<=b)return 1;
else return 0;
}
int main()
{
cin>>n>>a>>b;
int sum = 0;
for(int i=1;i<=n;i++)
{
if(pa(i))sum+=i;
}
cout<<sum<<endl;
return 0;
}
C题题解:一直除2除下去即可,计算除的次数。
AC代码:
#include<iostream>
using namespace std;
long long a,b;
int main()
{
cin>>a>>b;
long long sum = 0;
while(a<=b)
{
sum++;
a*=2;
}
cout<<sum<<endl;
}
D题题解:从左到右遍历,出现不一样的数字那么最大的偏转子序列长度就是max(i,n-i),那么最终的答案就是每一次出现不一样数字的子序列长度的最小值。
AC代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn = 100007;
char a[maxn];
int n;
int main()
{
cin>>a;
n = strlen(a);
int ans = n;
for(int i=1;i<n;i++)if(a[i-1]!=a[i])ans=min(ans,max(i,n-i));
cout<<ans<<endl;
}