答案对吗?
#include <iostream>
#include<math.h>
using namespace std;
int n,m;
long long sum;
bool vis[55];
string str[55];
int main(){
cin>>n>>m;
sum=(long long)pow(10,n);
for(int i=1;i<=m;i++){
cin>>str[i];
vis[i]=1;
}
for(int i=1;i<=m;i++){
int len=str[i].size();
for(int j=1;j<=m;j++){
if(i!=j&&!str[i].find(str[j])){
vis[i]=0;
break;
}
}
if(vis[i]) sum-=(long long)pow(10,n-len);
}
cout<<sum;
} 你输入 10 3
1 1 1
结果为10000000000这是错的应该是9000000000然而你这却是ac答案
如下代码为啥错谢谢
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int com(const void *a,const void *b){
return *(int *)a-*(int *)b;
}
int wei(int a){
int cnt=1;
while (a=a/10){
cnt++;
}
return cnt;
}
int main() {
int n,m;
scanf("%d %d",&n,&m);
int a[m],b[m],bb[m];
for(int i=0;i<m;i++){
scanf("%d",&a[i]);
}
qsort(a,m, sizeof(a[0]),com);
for(int i=0;i<m;i++){
b[i]=wei(a[i]);
}
int p=1,h=0;
bb[h++]=a[0];
/*for(int i=1;i<m;i++){
if(b[0]<b[i]&&a[0]==a[i]/(int )pow(10,b[i]-b[0])){
continue;
}
bb[p]=a[i];
p++;
}*/
for(int j=0;j<m-1;j++){
h=p;
for(int i=1+j;i<m;i++){
if(b[j]<b[i]&&a[j]==a[i]/(int )pow(10,b[i]-b[j])){
a[i]=-2;
}
bb[h]=a[i];
h++;
}
p++;
}
for(int i=0;i<p-1;i++){
for(int j=i+1;j<p;j++){
if(bb[i]==bb[j]){
bb[j]=-1;
}
if(bb[i]!=bb[j]){
continue;
}
}
}
for(int i=0;i<p;i++){
printf("%d\n",bb[i]);
}
long long t;
int k=0;
t=(long long )pow(10,n);
long long sub=0;
for(int i=0;i<p;i++){
if(bb[0]==0&&k==0){
sub=(long long )pow(10,(n-1));
k=1;
}
if(bb[i]!=0&&bb[i]!=-1&&bb[i]!=-2){
sub=sub+(long long )pow(10,(n-wei(bb[i])));
continue;
}
}
printf("%lld",t-sub);
return 0;
}
查看9道真题和解析