1. 程式人生 > 其它 >【洛谷】P1204 [USACO1.2]擠牛奶Milking Cows

【洛谷】P1204 [USACO1.2]擠牛奶Milking Cows

題面: [USACO1.2]擠牛奶Milking Cows

題解:

觀察到時間最大是1e6,考慮簡單差分。

邊界判斷與一般差分不同,l處++,r本身處--。

最後掃描一遍計數即可。

#include<iostream>
using namespace std;
int main()
{
    int n,l,r,p[1000006],tot=0,mx=0,mn=0x7fffffff;
    int ans1=0,ans2=0,lin1=0,lin2=0;
    cin>>n;
    for(int i=1;i<=n;++i)
    {
        cin>>l>>r;
        p[l]
++,p[r]--; mx=max(mx,r); mn=min(mn,l); } for(int i=mn;i<=mx;++i) { if(!tot) { if(tot+p[i]) { ans2=max(ans2,lin2); lin1=1; } else lin2++; } else {
if(!(tot+p[i])) { ans1=max(ans1,lin1); lin2=1; } else lin1++; } tot+=p[i]; } cout<<ans1<<' '<<ans2<<endl; return 0; }
View Code

解題過程出錯:

差分思路不清晰。最開始考慮l處打+1標記,r處打-1標記,錯在如果有邊界重合無法判斷。