题解 | #代理服务器#

代理服务器

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;
}

全部评论

相关推荐

2025-12-18 14:15
已编辑
哈尔滨工程大学 前端工程师
牛客87317764...:最近没啥hc,做好心灰意冷的准备。另外,大概率只有字节给你面试,最好别作为处女面
实习简历求拷打
点赞 评论 收藏
分享
2025-12-27 22:35
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务