#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; }
全部评论
(1) 回帖