遍历所有字符串若存在相同字符串或前缀相同且长度短的跳过,反之减去它。
#include<bits/stdc++.h>
using namespace std;
char a[100][100]={0};//前n后m
int n,m;
int main(){
cin >> n >> m;
long long s=pow(10,n);
long long p;
for(int i=0;i<m;i++) cin >> a[i];
for(int i=0;i<m;i++){
p=1;
int a1=1;
char b[100]={0};
for(int j=0;j<strlen(a[i])-1;j++){//寻找是否存在前缀相同长度短的串
b[j]=a[i][j];
for(int k=0;k<m;k++){
if (i!=k&&(strcmp(b,a[k])==0)){
a1=0;
break;
}
}
}
for(int j=i+1;j<m;j++)
if(strcmp(a[i],a[j])==0){//寻找是否存在相同串
a1=0;
break;
}
if(a1){
for(int k=1;k<=(n-strlen(a[i]));k++)
{
p=p*10;
}
s=s-p;
}
}
cout << s;
return 0;
}
京公网安备 11010502036488号