题解 | #代理服务器#
代理服务器
https://www.nowcoder.com/practice/1284469ee94a4762848816a42281a9e0
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define TRUE true #define FALSE false int main() { char **input(int num); int a, b, i, j; char **cover,**real; while (scanf("%d", &a) != EOF) { cover=input(a); scanf("%d",&b); real=input(b); int num[a]; for(i=0;i<a;i++) { num[i]=0; for(j=0;j<b;j++) { if(strcmp(cover[i],real[j]))num[i]++; else break; } } j=0; for(i=0;i<a;i++){ if(num[i])j=1; } if(!j){ printf("-1"); return 0; } int time[a],t,min1,min,p,u,max; for(t=0;t<a;t++){ time[t]=0; i=0,p=t; while(i<b){ if(strcmp(cover[p],real[i]))i++; else{ for(u=0;u<a;u++) { num[u]=0; for(j=i;j<b;j++) { if(strcmp(cover[u],real[j]))num[u]++; else break; } } max=num[0],u=-1; for(j=0;j<a;j++){ if(p!=j){ if(num[j]>max){ u=j; max=num[j]; } } } if(u==-1){ while(++u==p); } p=u,time[t]++; } } } min=time[0],min1=0; for(t=0;t<a;t++){ if(time[t]<min){ min=time[t],min1=t; } } printf("%d\n",min); free(cover); free(real); } return 0; } char **input(int num){ char **in=malloc(sizeof(char*)*num); int i; for (i=0;i<num;i++) { in[i]=malloc(sizeof(char)*16); scanf("%s",in[i]); } return in; }