USACO--Milking Cows (C语言)挤奶牛

xiaoxiao2025-04-14  16

题目翻译:

     三个农民每天早上5点起床, 前往谷仓给三头奶牛挤奶。第一个农民在时间300开始挤奶(早上5点后以秒为单位测量), 在时间1000结束。第二个农民开始于时间700, 结束于时间1200。第三个农民开始于时间1500, 结束于时间2100。至少一个农民挤奶的最长连续时间是900秒(从300秒到1200秒)。从开始挤奶到结束挤奶的最长时间是300秒( 1500减去1200 )。

    你的工作是编写一个程序, 检查N ( 1 < = N < = 5000 )个挤奶农民的开始和结束时间列表, 并计算(秒) :

          1.至少有一头母牛挤奶的最长时间间隔。

          2.没有奶牛被挤奶的最长时间间隔(挤奶开始后)。

项目名称: milk2

输入格式:

第一行:单整数, N2....N+1行:小于1, 000, 000的两个非负整数, 分别是0500之后的开始和结束时间(秒)

输出格式:

  两个整数的单行,表示最长的连续挤奶时间和最长的空闲时间。

暴力解题:

  创建一个足够大(1000000)的数组,初始化为0,将挤奶的时间赋值为1。将题目转变为在一个只有1和0的数组中找最长的连续1和最长的连续0。

代码(C):

/* ID: xyj11361 LANG: C TASK: milk2 */ #include <stdio.h> void main() { FILE *fin = fopen ("milk2.in", "r"); FILE *fout = fopen ("milk2.out", "w"); int start,end,min=1000000,max=0,n,i,j,a=0,b=0,max_continue=0,max_idle=0,s[1000000]={0}; fscanf(fin,"%d",&n); for(i = 0; i < n; i++) { fscanf(fin, "%d %d", &start, &end); for(j = start; j < end; j++) { s[j] = 1; } if(start <= min) min = start; if(end >= max) max = end; } for(i = min; i <= max; i++) { if(s[i] == 1) { a++; if(b >= max_idle) max_idle = b; b = 0; } if(s[i] == 0) { b++; if(a >= max_continue) max_continue = a; a=0; } } fprintf(fout, "%d %d\n", max_continue, max_idle); }

 

转载请注明原文地址: https://www.6miu.com/read-5028227.html

最新回复(0)