• 题目1082:代理服务器(贪心算法)


    题目链接:http://ac.jobdu.com/problem.php?pid=1082

    详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus

    参考代码:

    //
    //  1082 代理服务器.cpp
    //  Jobdu
    //
    //  Created by PengFei_Zheng on 03/05/2017.
    //  Copyright © 2017 PengFei_Zheng. All rights reserved.
    //
     
    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <cstring>
    #include <cmath>
    #include <climits>
    #define MAX_SIZE 1001
    #define MAX_SERVER 5001
    //#define debug
    using namespace std;
     
    int n, m;
     
    struct Server{//define the struct of server
        int x, y, z, w;
        bool operator == (const Server &a) const{//reload the == operator
            return (x==a.x && y==a.y && z==a.z && w==a.w);
        }
    };
     
    Server s1[MAX_SIZE];
    Server s2[MAX_SERVER];
     
    int main(){
    #ifdef debug
        freopen("/Users/pengfei_zheng/Desktop/input.txt", "r", stdin);
    #endif
        while(scanf("%d",&n)!=EOF){
            for(int i = 0 ; i < n ; i++){
                scanf("%d.%d.%d.%d",&s1[i].x,&s1[i].y,&s1[i].z,&s1[i].w);
            }
            scanf("%d",&m);
            for(int i = 0 ; i < m ; i++){
                scanf("%d.%d.%d.%d",&s2[i].x,&s2[i].y,&s2[i].z,&s2[i].w);
            }
            if(1==n){//special case
                int i;
                for(i = 0 ; i < m ; i++){
                    if(s1[0]==s2[i]){
                        break;
                    }
                }
                if(i<m) printf("-1
    ");
                else printf("0
    ");
            }
            else{
                bool loopFlag = true;
                int start=0, ans = 0, idx = 0;
                int maxIdx;
                while(loopFlag){
                    maxIdx = -1;
                    loopFlag = false;
                    for(int i = 0 ; i < n ; i++){
                        idx = start;
                        while(idx < m && !(s1[i]==s2[idx])){
                            idx++;
                        }
                        maxIdx = max(maxIdx,idx);// find the last appear server
                    }
                    if(maxIdx < m){ //judge whether this server can reach all the other servers
                        ans++;
                        loopFlag = true;
                    }
                    start =  maxIdx + 1; //update the start Idx
                }
                printf("%d
    ",ans);
            }
        }
        return 0;
    }
    /**************************************************************
        Problem: 1082
        User: zpfbuaa
        Language: C++
        Result: Accepted
        Time:10 ms
        Memory:1612 kb
    ****************************************************************/
  • 相关阅读:
    函数的四种调用模式.上下文调用.call.apply
    caller.arguments.callee.eval
    面向对象相关知识总结
    javascript与jQuery的each,map回调函数参数顺序问题
    HTML5自定义属性的设置与获取
    [bzoj1911][Apio2010]特别行动队
    [学习笔记]乘法逆元
    [日常训练]普通计算姬
    [学习笔记]线性筛
    [学习笔记]数论(一)
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6803520.html
Copyright © 2020-2023  润新知