Codeforces Round#434 DIV.2

第一次打Codeforces,然而时差问题不允许, 掉了分, 下次换个号。 
今天写写水题发题解。
原比赛链接http://codeforces.com/contest/861   看了可以强行提升英文阅读水平
ProblemA  K-rounding

题目大意是有正整数 N (N<=1e9) ,K (0=<K<=8) ,找一个末尾有K个零的数 且是N的整数倍
超简单,答案是 lcm(N,10^K) 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,k;
long long gcd(long a,long b){
    return a%b==0?b:gcd(b,a%b);
}
int main(){
    cin>>n>>k;
    int p=1;
    while(k--)p*=10;
    long long ans=0;
    ans=n*p/gcd(n,p);
    cout<<ans;
    return 0;
}
A

ProblemB  Which floor ?

有一栋楼,每层的房间数相同,不知道每层有多少房间,已知房间的编号是按层次的顺序向上标的 (比如每层楼有三个房间,那么1,2,3号房间在第一层,4,5,6在第二层……)
下面给你M(M<=100)条信息,每条信息告诉你第ki个房间属于第fi层, 问题是求出第N(N<=100)个房间在第几层,如果判断不了就输出-1
这个可怜的数据范围, 就暴力枚举每层有多少房间,之后模拟,没了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m;
 4 int main(){
 5     int ans=-1,l=1,r=101;
 6     int x=0,y=0;
 7     scanf("%d%d",&n,&m);
 8     for(int i=1;i<=m;i++){
 9         cin>>x>>y;
10         if(y==1)l=max(l,x);
11         else{
12             l=max(l,x/y+(x%y==0?0:1));
13             r=min(r,(x-1)/(y-1));
14         }
15     }
16     for(int i=l;i<=r;i++)
17     {
18         int x=n/i+(n%i==0?0:1);
19         if(ans==-1)ans=x;
20         else if(ans!=x){cout<<-1;return 0;}
21     }
22     cout<<ans;
23 }
B

ProblemC Did you mean ?

把一个只含有小写字母的字符串分割成若干个合法的串,不合法串定义为 : 1.至少有连续的三个辅音字母(除了a e i o u)2.连续的辅音字母中至少有两个不同
简单的模拟,边读入边输出,累加连续的辅音字母个数,不合法就输出空格 。 注意一下赋的初值 ,还有过程中的小细节, 不然会被气死的

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[3005];
 4 int n;
 5 int len;
 6 bool flag; 
 7 int main(){
 8     scanf("%s",s+1);
 9     n=strlen(s+1);
10     for(int i=1;i<=n;i++){
11     if(s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u')
12     {
13         if(len&&s[i-1]!=s[i])flag=1;
14         if(flag&&len>=2)
15         {
16         printf(" ");
17         flag=0;    
18         len=1;
19         }
20         else len++;
21         printf("%c",s[i]); 
22     }
23     else
24     {
25         flag=0;
26         len=0;
27         printf("%c",s[i]);
28     }
29     }
30     return 0;
31 } 
C

Problem D Polycarp's phone book

题意:有一个电话本(只有九个数字),输出每个字符串的一个子串,这个子串满足在其他串中没有出现过。

水题一个,字符串hash丢进map里。

#include<bits/stdc++.h>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
map<ll,int> m;
map<ll,int> S;
int cnt;
char s[70001][10];
int n,len[70001];
ll work(int i,int j,int k)
{
    ll sum=0;
    for(j;j<=k;++j)
    sum=sum*11+s[i][j]-'0'+1;
    return sum;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%s",s[i]);len[i]=strlen(s[i]);
        for(int j=0;j<len[i];++j)
            for(int k=j;k<len[i];++k)
            ++m[work(i,j,k)];
    }
    for(int i=1;i<=n;++i)
    {
        S.clear();
        int ans=11,l=0;
        for(int j=0;j<len[i];++j)
            for(int k=j;k<len[i];++k)
            {
                int tmp=work(i,j,k);
                ++S[tmp];
                if(S[tmp]==m[tmp]) {if(ans>k-j+1) {ans=k-j+1;l=j;}}
            }
        for(int j=l;j<=l+ans-1;++j)
        putchar(s[i][j]);
        putchar('
');
    }
}
D
原文地址:https://www.cnblogs.com/Elfish/p/7541971.html