usaco 1.2.1(指针技巧)
2014-04-01 11:32
260 查看
★Milking Cows 挤牛奶
三个农民每天清晨 5 点起床,然后去牛棚给 3 头牛挤奶.第一个农民在 300 时刻(从 5 点开始计时,秒为单位)给他的牛挤奶,一直到 1000 时刻.第二个农民在 700 时刻开始,在 1200 时刻结束.第三个农民在 1500 时刻开始 2100 时刻结束.期间最长的至少有一个农民在挤奶的连续时间为 900 秒(从300 时刻到 1200 时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为 300 秒(从
1200 时刻到 1500 时刻).
你的任务是编一个程序,读入一个有 N 个农民(1 <= N <= 5000)挤 N 头牛的工作时间列表,计算以下
两点(均以秒为单位):
• 最长至少有一人在挤奶的时间段.
• 最长的无人挤奶的时间段.
PROGRAM NAME:milk2
INPUT FORMAT
Line 1: 一个整数 N. Lines 2..N+1: 每行两个小于 1000000 的非负整数,表示一个农民的开始时刻与结束时刻.
SAMPLE INPUT(file milk2.in)
3
300 1000
700 1200
1500 2100
OUTPUT FORMAT
一行,两个整数,即题目所要求的两个答案.
SAMPLE OUTPUT(file milk2.out)
900 300
#include<cstring> #include<cstdio> #include<iostream> using namespace std; int a[1000000],n,x,y; int MAX=0,maxn=0,minn=0,MIN=0,first=123456,end=0; int main(){ int i,j,s,t,m; memset(a,0,sizeof(a)); freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%d",&n); for (i=0;i<n;i++){ scanf("%d%d",&x,&y); for (j=x;j<y;j++){ a[j]=1; } if (x<=first) first=x; if (y>=end) end=y; } for (i=first;i<end;i++){ if (a[i]==1){ maxn++; if (maxn>=MAX) MAX=maxn; } if (a[i]==0){ maxn=0; minn++; if (minn>=MIN) MIN=minn; } else minn=0; } printf("%d %d\n",MAX,MIN); return 0; } SOURCE
刚开始看到的第一眼以为上线段树+部分优化 但40大神表示那有可能会超时,之后就向我介绍了某种很简便的方法...学习了~~ 如果用在这题上的话是这样的,用一个数组模拟,如果在某段时间有人的话,那段时间a[i]=1;最后一遍过就可以了 40给我讲的例子是类似的,只不过那个是问最多人的时间段 改成a[i]++就可以了 MARK
相关文章推荐
- C++指针数组、数组指针、数组名及二维数组技巧汇总
- 【BZOJ】1656:[Usaco2006 Jan]The Grove 树木(bfs+特殊的技巧)
- 色彩的使用技巧与指针
- 【BZOJ1720】[Usaco2006 Jan]Corral the Cows 奶牛围栏 双指针法
- USACO 1.2.1 Milking Cows
- 线程的封装技巧:把任意类的成员函数指针作为参数
- 技巧:用 C 语言实现程序的多态性: C中只有两种类型int 和void *, 万能指针void *
- 【指针】ASP.NET页面技巧
- usaco 1.2.1 Milking Cows 挤牛奶
- 指针阅读技巧解析
- 指向指针的指针 char **使用技巧
- C++指针数组、数组指针、数组名及二维数组技巧汇总
- usaco1.2.1 解题报告
- struct的初始化,拷贝及指针成员的使用技巧
- 代替结构体中定义指针奇淫技巧
- struct的初始化,拷贝及指针成员的使用技巧(摘自http://blog.chinaunix.net/u/9577/showart_417268.html)
- USACO1.2.1 Milking Cows (milk2)
- struct 类型指针技巧
- 使用VS2010调试技巧让C指针无处遁形
- USACO 1.2.1 Milking Cows