有关10.20号codeforces的相关感悟

it2024-12-04  13

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

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

 

最新回复(0)