Description
农夫想要在第D天的时候剩下F2千克的草,而他一共有F1千克的草,如果他将草投放到农场就会有牛来吃草,所以他想知道在第几天的时候放他的F1千克的草料到农场上,才能让他的草料在第D天的时候剩下F2千克
Input
第一行为四个整数C,F1,F2,D分别表示牛的数量,农夫拥有的草的数量,农夫在第D天剩余草的数量和天数D,之后C行每行两个整数表示该头牛在农场上出现的时间段
Output
农夫想要在第D天的时候剩下F2千克的草,而他一共有F1千克的草,如果他将草投放到农场就会有牛来吃草,所以他想知道在第几天的时候放他的F1千克的草料到农场上,才能让他的草料在第D天的时候剩下F2千克
Input
第一行为四个整数C,F1,F2,D分别表示牛的数量,农夫拥有的草的数量,农夫在第D天剩余草的数量和天数D,之后C行每行两个整数表示该头牛在农场上出现的时间段
Output
输出农夫放草料的时期
(题意来自https://blog.csdn.net/v5zsq/article/details/46833687)
题解
暴力,用一个数组记录下来每一天消耗多少草料,然后从第D天开始往前枚举就OK。
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN = 2005;
const int INF = 0x3f3f3f3f;
int C, F1, F2, D, a[MAXN];
int main()
{
scanf("%d%d%d%d", &C, &F1, &F2, &D);
for (int i = 0; i < C; i++)
{
int l, r; scanf("%d%d", &l, &r);
for (int j = l; j <= r; j++) a[j]++;
}
for (int i = D; i >= 1; i--)
{
F1 -= a[i];
if (F1 == F2)
{
printf("%d\n", i);
break;
}
}
return 0;
}
/*
3 14 4 10
1 9
5 8
8 12
*/