milk2解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  N个农民,每个农民从L[i]到R[i]时间给奶牛挤奶。问最长的一直有人挤奶的时间,和最长的没有人挤奶的时间。
【数据范围】
  1<=N<=5000
  0<=L[i],R[i]<=1,000,000
【输入样例】
  3
  300 1000
  700 1200
  1500 2100
【输出样例】
  900 300
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  先对N个农民按照L[i]排序,然后顺序扫。
  我用Sum[0]记录最长一直没人挤奶的时间,用Sum[1]记录最长一直有人挤奶的时间。
  用Lt记录当前所考虑的开始时间,Rt记录当前所考虑的结束时间。
  “a←b”表示用b更新a,即 if(b>a) a=b;
  开始 Lt=L[1]; Rt=R[1];
  如果 R[i]<L[i+1],说明i和i+1时间分开了,那么 Sum[0]←L[i+1]-Rt; Sum[1]←Rt-Lt;
  否则,说明i+1可以和i的挤奶时间连上,那么 Rt←R[i+1];
  算法描述完毕,注意别写错就好。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  一遍AC。
  复习了下快排~
  还有由于直接上手写的代码,代码不漂亮:
    1.bool变量p没用上
    2.L和R如果定义成Time类型,和T[]保持一致就更好看了

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 /*
ID: icedrea1
PROB: milk2
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; int N;
struct Time { int b,g; } T[+]; void qsort(Time T[],int l,int r)
{
if(l>=r) return; int i=l,j=r,x=T[(l+r)>>].b;
while(true)
{
while(T[i].b<x) ++i;
while(T[j].b>x) --j;
if(i>j) break;
Time t=T[i]; T[i]=T[j]; T[j]=t;
++i; --j;
}
qsort(T,l,j); qsort(T,i,r);
} void change(int &a,int b)
{
if(b>a) a=b;
} int main()
{
ifstream in("milk2.in");
ofstream out("milk2.out"); in>>N;
for(int i=;i<=N;++i) in>>T[i].b>>T[i].g; qsort(T,,N); bool p; // Ture挤奶,F空闲
int L,R; // 当前时间段
int Sum[]={,}; // 最大值——0空闲时间,1挤奶时间 L=T[].b; R=T[].g;
for(int i=;i<=N;++i)
{
if(R<T[i+].b) // 挤奶时间完结
{
change(Sum[],T[i+].b-R);
change(Sum[],R-L);
L=T[i+].b; R=T[i+].g;
}
else // 更新挤奶时间
{
change(R,T[i+].g);
}
}
change(Sum[],R-L); out<<Sum[]<<" "<<Sum[]<<endl; in.close();
out.close();
return ;
}

USACO Section1.2 Milking Cows 解题报告的更多相关文章

  1. USACO Section1.5 Prime Palindromes 解题报告

    pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section1.5 Superprime Rib 解题报告

    sprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  3. USACO Section1.5 Number Triangles 解题报告

    numtri解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  4. USACO Section1.4 Arithmetic Progressions 解题报告

    ariprog解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  5. USACO Section1.3 Combination Lock 解题报告

    combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  6. USACO Section1.3 Prime Cryptarithm 解题报告

    crypt1解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  7. USACO Section1.3 Barn Repair 解题报告

    barn1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  8. USACO Section1.3 Mixing Milk 解题报告

    milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...

  9. USACO Section1.2 Palindromic Squares 解题报告

    palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...

随机推荐

  1. TP5.1:数据库的增删改查操作(基于数据库操作)

    1.在app/index/controller文件夹下创建一个文件,名为:Operation 注意:起名一定要避开关键字,例如:mysql,curd等等,如果使用关键字起名,会造成报错! 在Opera ...

  2. ubuntu16.4安装 VirtualBox

    1) 从oracle官网下载virtual box安装包 2) 安装支持包 sudo apt-get install libqt5x11extras5 libsdl1.2debian 3) sudo ...

  3. leetcode 141、Linked list cycle

    一种方法是用set存储出现过的指针,重复出现时就是有环: class Solution { public: bool hasCycle(ListNode *head) { set<ListNod ...

  4. Ubuntu 如何将桌面上的Home中的文件夹除去

    安装Ubuntu后, 由于无法用Terminal(终端)进入带中文的文件夹,会引起很多操作不便.很多朋友想到了将它们都改成中文,但是当再次开机重启使却会发现,原本光洁的桌面现在竟然出现了一堆文件夹?? ...

  5. centos 7 iptables基本配置

    安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y iptab ...

  6. Uva 10375 选择与除法 唯一分解定理

    题目链接:https://vjudge.net/contest/156903#problem/E 题意:已知 求:C(p,q)/C(r,s) 其中p,q,r,s都是10^4,硬算是肯定超数据类型的. ...

  7. js延迟执行与循环执行

    延迟一段时间执行特定代码: setTimeout(function () { window.location.href = 'login' },1200); 循环执行: function test() ...

  8. 11_1_GUI

    11_1_GUI 1. AWT AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application的GUI(Graphics User Interface ...

  9. 关于img底部空白

    <img>元素底部为何有空白? 问题: 最近听网课遇到这样一个问题,先po出代码如下: <!--html--> <div class="top"> ...

  10. js、jquery初始化加载顺序

    // ready 这个方法只是在页面所有的DOM加载完毕后就会触发 // 方式1 $(function(){ // do something }); // 方式2 $(document).ready( ...