首页 > 代码库 > Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam
Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam
继续刷水题,不能再错了!!
题目大意:
要求在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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。