zoukankan      html  css  js  c++  java
  • 【codeforces】【比赛题解】#861 CF Round #434 (Div.2)

    本来是rated,现在变成unrated,你说气不气。

    链接

    【A】k-凑整

    题意:

    一个正整数(n)的(k)-凑整数是最小的正整数(x)使得(x)在十进制下末尾有(k)个或更多的(0)并且(n)整除(x)。

    举个例子:(375)的(4)-凑整数是(375cdot80=30000)。(30000)是最小的整数使得末尾有(4)个及以上的(0),并且能被(375)整除。

    试求出(n)的(k)-凑整数。

    输入:

    一行,两个正整数(n,k(1leq nleq10^9,0leq kleq 8))。

    输出:

    一个整数,(n)的(k)-凑整数。

    题解:

    算出(n)中的(2)和(5)质因数的个数。注意精度。

     1 #include<cstdio>
     2 #include<cmath>
     3 using namespace std;
     4 int n,n2,k,t,f,t2,f2;
     5 int main(){
     6     scanf("%d%d",&n2,&k); n=n2;
     7     while(!(n2%2)) n2/=2, ++t;
     8     while(!(n2%5)) n2/=5, ++f;
     9     t2=0<k-t?k-t:0;
    10     f2=0<k-f?k-f:0;
    11     printf("%I64d",(long long)n*(int)(pow(2,t2)+0.5)*(int)(pow(5,f2)+0.5));
    12     return 0;
    13 }

    【B】哪层楼?

    题意:

    在Polycrap住的大楼中,每层有相等的公寓数量。不幸的是,Polycrap并不知道每层楼有多少间公寓,但是他记得这些公寓从(1)开始从低层编号到高层。就是说,前几间公寓在第一层,接下来几间在第二层等等。Polycrap不记得总共有多少间公寓,所以你可以认为大楼无穷高(就是说有无数层楼,有无数间公寓)。注意楼层从(1)开始编号。

    Polycrap记得某些公寓在几楼。保证这些信息不互相矛盾。意思是一定存在这样的大楼满足Polycrap的信息。

    给定这些信息,有办法确定(n)号公寓的确切楼层吗?

    输入:

    第一行,两个数(n,m(1leq nleq100,0leq mleq100))。(n)表示你要寻找楼层的公寓,(m)表示Polycrap所知道的公寓数量。

    接下来(m)行,每行两个数(k_{i},f_{i}(1leq k_{i},f_{i}leq100)),表示第(k_{i})间公寓在第(f_{i})层楼,所有的(k_{i})互不相同。

    输出:

    如果能确定(n)号公寓在哪一层,输出这个层数,否则输出-1。

    题解:

    难点在于不是要确定一层有几间公寓,而是要确定第(n)间公寓在哪一层,这是不同的。

    我们可以先确定可能的每层公寓数的最大值和最小值,这可以直接枚举。而如果对于最大值和最小值,(n)号公寓所在楼层都是一样的,那么可以确定一定是这层楼,否则无法确定。

     1 #include<cstdio>
     2 int n,m,k[1000],f[1000],ans1=0,ans2=0;
     3 int main(){
     4     scanf("%d%d",&n,&m);
     5     for(int i=1;i<=m;++i) scanf("%d%d",k+i,f+i);
     6     for(int i=1,o=1;i<=100;++i,o=1){
     7         for(int j=1;j<=m&&o==1;++j) if((k[j]-1)/i+1!=f[j]) o=0;
     8         if(o&&!ans1) ans1=i;
     9         if(o) ans2=i;
    10     }
    11     if((n-1)/ans1+1==(n-1)/ans2+1) printf("%d",(n-1)/ans1+1);
    12     else puts("-1");
    13     return 0;
    14 }

    【C】你的意思是……?

    题意:

    Beroffice文本编辑器有很多特色,其中之一是自动寻找并更正拼写错误。

    Beroffice的这一功能只针对小写字母。Beroffice认为一个单词有拼写错误就意味着单词中有三个连续的辅音字母。唯一的例外是这三个字母是相同的,如果这样,这一大块字母都没有拼写错误,不管这一段有多长。准确的说,一个单词有拼写错误当且仅当有三个及以上的连续辅音字母,并且这些辅音字母不完全相同。

    举个例子:

    这些单词有拼写错误:“hellno”,“hackcerrs”和“backtothefuttttre”。

    这些单词没有:“helllllooooo”,“tobeornottobe”和“oooooo”。

    如果Beroffice找到了一个有拼写错误的单词,它会在这个词中加上尽量少的空格(把它分成若干个单词)使得每一部分都不含有拼写错误。

    输入:

    一个字符串,只包含小写字母,长度在(1)到(3000)以内。

    输出:

    如果这个单词没有拼写错误,直接输出,否则输出这个字符串插入若干空格后的字符串。

    题解:

    贪心,找到了拼写错误就断开。

    #include<cstdio>
    char str[3002],lst1,lst2;
    const bool c[26]={0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1};
    int main(){
        scanf("%s",str); lst1=lst2=-1;
        for(int i=0;str[i]!='';++i){
    //        printf("%d %d
    ",lst1,lst2);
            str[i]-='a';
            if(!c[str[i]]) lst1=lst2=-1;
            else
                if(lst1!=-1&&lst2!=-1&&(!(lst1==lst2&&lst2==str[i]))) putchar(' '), lst1=lst2=-1;
            printf("%c",str[i]+'a');
            lst1=lst2; lst2=c[str[i]]?str[i]:-1;
        }
        return 0;
    }
  • 相关阅读:
    asp.net AD 域验证
    ASP.NET身份验证
    .Net默认IE版本号的两种方式
    (转)移动端自适应方案
    (转)手机web——自适应网页设计(html/css控制)
    (转)优雅降级和渐进增强的区别
    (转)hasLayout与BFC的触发条件
    (转)js中几种实用的跨域方法原理详解
    (转)js实现继承的5种方式
    (转)js 判断各种数据类型
  • 原文地址:https://www.cnblogs.com/PinkRabbit/p/7664167.html
Copyright © 2011-2022 走看看