我的题解:手机号码

#include<bits/stdc++.h>
using namespace std;
bool cmp(char *p1,char *p2){
    return strcmp(p1,p2)<0;
}
//判断p1是否是p2的前缀
bool pre(char * p1,char *p2){
    for(int i=0;i<strlen(p1);i++){
        if(p1[i]!=p2[i])return false;
    }
    return true;
}
//n位有多少种号码可能
long long sum(int n){
    long long r=1;
    for(int i=0;i<n;i++){
        r*=10;
    }
    return r;
}
int main(){    
    int n,m;
    long long ans;
    char s[50][20];
    char *t[50];
    int c[50]={};//记录该保留号是否以其他保留号为前缀
    cin>>n>>m;
    ans=sum(n);
    for(int i=0;i<m;i++){
        cin>>s[i];
        t[i]=s[i];
    }
    sort(&t[0],&t[0]+m,cmp);//保留号字典排序
    for(int i=0;i<m;i++){
        for(int j=i+1;j<m;j++){
            if(pre(t[i],t[j]))c[j]=1;//前缀
        }
    }
    for(int i=0;i<m;i++){
        if(c[i]==0){
            ans-=sum(n-strlen(t[i]));
        }
    }
    cout<<ans;
    return 0;
}

全部评论
.  
点赞 回复 分享
发布于 2019-07-09 13:34

相关推荐

不愿透露姓名的神秘牛友
07-24 13:39
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-23 14:13
这是聊岔撇了吗,相同的话问了两遍
吴offer选手:上下文切换这一块
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务