题解 | #代理服务器#

代理服务器

http://www.nowcoder.com/practice/1284469ee94a4762848816a42281a9e0

第一次尝试时错误地将题目理解成了求解需要切换多少次(忽略了次序要求)

之后更改思路,想到应该选择能跑最远的agent,但机械地选择了在整体区间上进行。

学习评论区@愣头青丶别处仰望 大佬的代码后改正了想法。即利用所有agent来划分区间,选择能跑最远的那个,之后再重新选择(这才是贪心的思想所在)。如果跑不动了,则说明没有符合要求的安排方式。



#include <cstdio>
#include <cstring>

using namespace std;

char agents[1002][16];
char dest[5002][16];

bool vis[5002];

int main(void){
    
    int n, m;
    
    while(scanf("%d", &n) != EOF){
        for(int i=0; i<n; i++){
            scanf("%s", agents[i]);
        }
        scanf("%d", &m);
        for(int i=0; i<m; i++){
            scanf("%s", dest[i]);
            vis[i] = false;
        }
        
        int maxn=0, cnt = 0, idx = 0, flag = 1;
        
        while(flag && idx < m){
            maxn = 0;
            for(int i = 0; i<n; i++){
                int k = idx;
                while(k<m && strcmp(agents[i], dest[k]) != 0)
                    k++;
                if(k - idx > maxn)
                    maxn = k - idx;
            }
            
            if(maxn == 0)
                flag = 0;
            cnt++;
            idx += maxn;
        }
        if(flag)
            printf("%d\n", cnt - 1);
            
        else
            printf("-1\n");
        
    }
    
    return 0;
}
全部评论

相关推荐

Beeee0927:正确的建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务