HJ19 简单错误记录 || 字符串模拟
就是字符串模拟和处理。最大的问题就是题面题意写得真的挺模糊的,好多地方有点表意不明。。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=110; 4 char a[maxn][maxn]; 5 int b[maxn],num_qc=0,cnt[maxn],ans[maxn],num_ans=0; 6 bool fg[maxn],f[maxn]; 7 struct JL{ 8 char s[maxn],zm[maxn]; 9 int num,cnt; 10 }jl[maxn],qc[maxn]; 11 void wk(char ans[],char zm[],char a[]){ 12 int la=strlen(a); 13 int lst=0; 14 for(int i=0;i<la;i++){ 15 if(a[i]=='\\')lst=i; 16 } 17 if(lst) lst++; 18 char c[maxn]={}; 19 int lc=0; 20 for(int i=lst;i<la;i++) c[lc++]=a[i]; 21 // printf("C: %s %d\n",c,lc); 22 if(lc<=16) { 23 strcpy(ans,c); 24 strcpy(zm,c); 25 return; 26 } 27 lc=strlen(c); 28 // 1234 29 // 2wei 30 // 34 31 for(int i=0;i<16;i++) 32 ans[i]=c[lc-16+i]; 33 // printf("NOW:%s %s\n",c,ans); 34 strcpy(zm,c); 35 return; 36 } 37 int main(){ 38 int n=0; 39 while(~scanf("%s",a[n])){ 40 scanf("%d",&b[n]); 41 n++; 42 // if(n==11)break;/////// 43 } 44 for(int i=0;i<n;i++)fg[i]=1; 45 for(int i=0;i<n;i++){ 46 if(fg[i]==0)continue; 47 for(int j=i+1;j<n;j++){ 48 if(fg[j]==0)continue; 49 if(b[i]!=b[j])continue; 50 if(strcmp(a[i],a[j])==0)fg[j]=0; 51 } 52 }//quchong 53 num_qc=0; 54 for(int i=0;i<n;i++){ 55 if(fg[i]==0)continue; 56 num_qc++; 57 qc[num_qc].num=b[i]; 58 wk(qc[num_qc].s,qc[num_qc].zm,a[i]); 59 // printf("TEST: %s %d %s\n",qc[num_qc].s,qc[num_qc].num,qc[num_qc].zm); 60 } 61 // for(int i=1;i<=num_qc;i++) 62 // printf("%s %d %s\n",qc[i].s,qc[i].num,qc[i].zm); 63 for(int i=1;i<=num_qc;i++)f[i]=1; 64 for(int i=1;i<=num_qc;i++){ 65 if(f[i]==0) continue; 66 for(int j=i+1;j<=num_qc;j++){ 67 if(f[j]==0)continue; 68 if(strcmp(qc[i].s,qc[j].s)==0&&qc[i].num==qc[j].num){ 69 qc[i].cnt++; 70 f[j]=0; 71 } 72 } 73 qc[i].cnt++; 74 ans[++num_ans]=i; 75 } 76 if(num_ans>8){ 77 for(int i=num_ans-8+1;i<=num_ans;i++){ 78 printf("%s %d %d\n",qc[ans[i]].s,qc[ans[i]].num,qc[ans[i]].cnt); 79 } 80 } 81 else { 82 for(int i=1;i<=num_ans;i++) 83 printf("%s %d %d\n",qc[ans[i]].s,qc[ans[i]].num,qc[ans[i]].cnt); 84 } 85 return 0; 86 }