一个USACO算法题目 帮忙

时间:2008-05-20 23:47:03   来源:论坛整理  作者:  编辑:chinaitzhe
假设有i个人去喂牛
每个人喂牛的开始时间和结束时间为n m
i n m均为输入
然后求 1.最长的时间内一直有人喂牛 2.最长的时间内没人喂牛

比如 有3个人
第一个人时间是300 1000
第二个人时间是700 1200
第三个人时间是1500 2100

最长有人喂牛时间为1200-300=900 最长时间没人喂牛时间为1500-1200=300
注重 实际输入的时间不一定是按照从小到大的顺序,任何顺序均可
输入
3
300 1000
700 1200
1500 2100
输出
900 300
我写的代码如下

C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/







/*

ID: lc198901

PROG: milk2

LANG: C  

*/

#include<iostream>

#include<vector>

#include<algorithm>

#include<fstream>

using namespace std;

struct my_pair

{

    int first, second;

    my_pair(int _f, int _s):first(_f), second(_s){}

};



template<typename T>

struct pair_cmp_first

{

    bool operator () (const T& _L, const T& _R)

    {return    _L.first < _R.first;}

};



//两个struct结构体由飞雪帮助 表示感谢

int main()

{

    ifstream fin("milk2.in");

    ofstream fout("milk2.out");

    int n;

    fin>>n;

    vector<my_pair> Time;

    for(int j=0;j!=n;  j)

    {

        int temp1,temp2;

        fin>>temp1>>temp2;

        Time.push_back(my_pair(temp1,temp2));

    }

    sort(Time.begin(), Time.end(), pair_cmp_first<my_pair>()); //按照起始时间从小到大排序

    vector<int> MilkTime,NoMilkTime;

    int beg=0,i=0;

    int endTime=Time[beg].second;

    while(i!=n)

    {

        int begTime=Time[beg].first;

        if((i!=n-1)&&(Time[i 1].first-endTime<=0))

        {

            endTime=max(endTime,Time[i 1].second);

            begTime=min(begTime,Time[i 1].first);

            MilkTime.push_back(endTime-begTime);

            i  ;

        }

        else

        {

            beg=i 1;

            i=beg;

            if(i!=n)

                NoMilkTime.push_back(Time[i].first-Time[i-1].second);

        }

        

    }

    MilkTime.push_back(Time[n-1].second-Time[n-1].first);

    NoMilkTime.push_back(0);

    int pos1=max_element(MilkTime.begin(),MilkTime.end())-MilkTime.begin(),

        pos2=max_element(NoMilkTime.begin(),NoMilkTime.end())-NoMilkTime.begin();

    fout<<MilkTime[pos1]<<" "<<NoMilkTime[pos2]<<endl;

    return 0;

}






通过了六组测试数据 最后一千组的数据错误了
请哪位帮帮忙
谢谢了
网友回复:up
关键字:一个,USACO,算法,题目,帮忙,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面