题解 | #代理服务器#
代理服务器
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;
}

