当前位置: 代码迷 >> 综合 >> 有关10.20号codeforces的相关感悟
  详细解决方案

有关10.20号codeforces的相关感悟

热度:7   发布时间:2024-03-06 23:09:05.0

第一题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不相同的都连他……

后面的题稍后再补,去吃饭了……好饿

 

  相关解决方案