USACO-Section1.3 Milking Cows (区间问题)
生活随笔
收集整理的這篇文章主要介紹了
USACO-Section1.3 Milking Cows (区间问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2017-5-30
題目描述
給你幾個區間,求出最長的連續長度以及最短的連續長度解答
最長為1000000,在區間內則賦值為1,否則不操作,最后計算出結果 即可,這種方法耗時比較長,注意區間的開閉問題代碼
/* ID: 18795871 PROG: milk2 LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std;const int N = 1000000; bool f[N+1];ifstream fin("milk2.in"); ofstream fout("milk2.out");void res(int a,int b){for (int i=a;i<b;i++) f[i]=true; } int main() {int i,n,a,b,ma=-N,mi=N;fin>>n;memset(f,false,sizeof(f));for (i=0;i<n;i++){fin>>a>>b;ma=max(a,ma);ma=max(ma,b);mi=min(a,mi);mi=min(mi,b);res(a,b);}int res1=-N,res2=-N,sum1,sum2;i=mi;while (i<ma){sum1=0;sum2=0;while (!f[i]&&i<=ma){sum1++;i++;}while (f[i]&&i<=ma){sum2++;i++;}res1=max(res1,sum1);res2=max(res2,sum2);}fout<<res2<<" "<<res1<<endl;return 0; }或者這么寫…其實是一樣一樣的。
/* ID: 18795871 PROG: milk2 LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std;ifstream fin("milk2.in"); ofstream fout("milk2.out");const int N = 1000000; bool f[N+1]; int n;int main(){int i,j,e,s,mis,mae;while (fin>>n){mis=N;mae=0;memset(f,false,sizeof(f)); for (i=0;i<n;i++){fin>>s>>e;mis=min(mis,s);mae=max(mae,e);for (j=s;j<e;j++){f[j]=1;}}int l=0,h=1,r1=0,r2=0;for (i=mis+1;i<=mae;i++){if (f[i]==f[i-1]){if (f[i]) h++;else l++;}else{r1=max(r1,l);r2=max(r2,h); if (f[i]){l=0;h=1;}else{l=1;h=0;}}}fout<<r2<<" "<<r1<<endl;}return 0; }按理來說應該是可以按照開始時間排序然后求解的。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的USACO-Section1.3 Milking Cows (区间问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js写的滑动解锁
- 下一篇: c++虚函数的作用是什么?