遍历所有字符串若存在相同字符串或前缀相同且长度短的跳过,反之减去它。

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