第一题Boring Apartments:
大致是说数据的存入总是为x,xx,xxx这样,最多一个数的组合有4项,给出一个带重合的数,依次求和(特别注意:不是求有多少个数,应是有几位就加几)
于是:可以先求出前面出现的数乘以出现时排序的总数为10,再加上从这个数开始的各个位即可:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,t,x,y;
cin>>n;
while(n--){
int sum=1,su=0;
cin>>t;
x=t%10;
y=t/10;
su++;
if(x==1)
while(y!=0){
su++;
sum=sum+su;
y/=10;
}
else{
sum=sum+10*(x-1);
while(y!=0){
su++;
sum+=su;
y/=10;
}
}
cout<<sum<<endl;
}
return 0;
}
第二题:Yet Another Bookshelf
形式上看起来像是移动书架,但是仔细想想可以抽象为求解将所有的1挪到连续位置的次数,即求解各个1之间有多少个0即可,(注:因为可以把它一块挪动,比如两本书放在一起向右挪动一位即一次),因此可以通过用两个变量,一个求碰到第一个1之后的所有的0个数,一个在碰到1之后清零后继续计算0的个数,即最后结果为两数相减。
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,a[51],sum=0,se=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
if(a[i]==1){
for(int j=i;j<=n;j++){
if(a[j]==0){
sum++;
se++;}else se=0;
}
sum=sum-se;
break;
}else continue;
}
cout<<sum<<endl;
}
return 0;
}
第三题和第四题说实话没有看懂它的意思,按照题意的话案例应该 不止一组解,就非常迷惑,然后也没写出来。结果看了别的题解之后发现果然,是被案例骗了……第三个可以直接用贪心,然后让最厉害的那条鱼变强。第四个帮派那个有点迷惑,后来想了一下没说要连成一条线之类的嘛,可以直接让与1不相同的都连他……
后面的题稍后再补,去吃饭了……好饿