题解 | #代理服务器#

代理服务器

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

全部评论

相关推荐

哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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