竞赛讨论区 > 我的题解:手机号码
头像
zeru
发布于 2019-05-23 09:58
+ 关注

我的题解:手机号码

#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;
}

全部评论

(1) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐