标签:codeforces 刷题 水
继续刷水题,不能再错了!!
题目大意:
要求在n天内学习t小时,给出每一天可以学习的最小时间和最大时间。问能不能实现,若可以输出时间表。
解题思路:
水题一个,保证在区间范围内的情况下直接贪心。
下面是代码:
#include <set> #include <map> #include <queue> #include <math.h> #include <vector> #include <string> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <cctype> #include <algorithm> #define eps 1e-10 #define pi acos(-1.0) #define inf 107374182 #define inf64 1152921504606846976 #define lc l,m,tr<<1 #define rc m + 1,r,tr<<1|1 #define zero(a) fabs(a)<eps #define iabs(x) ((x) > 0 ? (x) : -(x)) #define clear1(A, X, SIZE) memset(A, X, sizeof(A[0]) * (min(SIZE,sizeof(A)))) #define clearall(A, X) memset(A, X, sizeof(A)) #define memcopy1(A , X, SIZE) memcpy(A , X ,sizeof(X[0])*(SIZE)) #define memcopyall(A, X) memcpy(A , X ,sizeof(X)) #define max( x, y ) ( ((x) > (y)) ? (x) : (y) ) #define min( x, y ) ( ((x) < (y)) ? (x) : (y) ) using namespace std; struct node { int min1,max1; }da[35]; int main() { int d,t,uplim=0,downlim=0; scanf("%d%d",&d,&t); for(int i=0;i<d;i++) { scanf("%d%d",&da[i].min1,&da[i].max1); downlim+=da[i].min1; uplim+=da[i].max1; } if(uplim<t||downlim>t) { puts("NO"); } else { puts("YES"); t-=downlim; for(int i=0;i<d;i++) { if(t>=da[i].max1-da[i].min1) { printf("%d ",da[i].max1); t-=da[i].max1-da[i].min1; } else if(t==0) { printf("%d ",da[i].min1); } else if(t<da[i].max1-da[i].min1) { printf("%d ",t+da[i].min1); t=0; } } } return 0; }
Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam
标签:codeforces 刷题 水
原文地址:http://blog.csdn.net/lin375691011/article/details/41594947