codeforces比赛题解#861 CF Round #434 (Div.2)
Posted PinkRabbit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces比赛题解#861 CF Round #434 (Div.2)相关的知识,希望对你有一定的参考价值。
本来是rated,现在变成unrated,你说气不气。
链接。
【A】k-凑整
题意:
一个正整数\(n\)的\(k\)-凑整数是最小的正整数\(x\)使得\(x\)在十进制下末尾有\(k\)个或更多的\(0\)并且\(n\)整除\(x\)。
举个例子:\(375\)的\(4\)-凑整数是\(375\cdot80=30000\)。\(30000\)是最小的整数使得末尾有\(4\)个及以上的\(0\),并且能被\(375\)整除。
试求出\(n\)的\(k\)-凑整数。
输入:
一行,两个正整数\(n,k(1\leq n\leq10^9,0\leq k\leq 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(1\leq n\leq100,0\leq m\leq100)\)。\(n\)表示你要寻找楼层的公寓,\(m\)表示Polycrap所知道的公寓数量。
接下来\(m\)行,每行两个数\(k_{i},f_{i}(1\leq 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]!=‘\0‘;++i){ // printf("%d %d\n",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; }
以上是关于codeforces比赛题解#861 CF Round #434 (Div.2)的主要内容,如果未能解决你的问题,请参考以下文章
codeforces比赛题解#869 CF Round #439 (Div.2)
codeforces比赛题解#849 CF Round #431 (Div.2)
codeforces比赛题解#920 Educational CF Round 37
codeforces比赛题解#854 CF Round #433 (Div.2)