一个USACO算法题目 帮忙
时间:2008-05-20 23:47:03
来源:论坛整理 作者: 编辑:chinaitzhe
每个人喂牛的开始时间和结束时间为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 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面