【题解】CodeVS1217 NOIP2011D2T2借教室
来源:互联网 发布:创新发展的理念知乎 编辑:程序博客网 时间:2024/05/29 03:17
NOIP2011D2T2 借教室
题目
原题链接
在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。
面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj, sj, tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室。
我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提供dj个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。
借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第sj天到第tj天中有至少一天剩余的教室数量不足dj个。
现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改订单。
考点
- 高性能
- 前缀和
思路
根据在题目里描粗的字,可以用O(1)的前缀和就可以了,再用一个差分实现区间的修改
代码
#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct lend{ int TimeStart; int TimeEnd; int LendNum;}lender[1000001];int s[1000001];int totdays,totlend;int maxlend[1000001];int ans=0;inline void read(int &x){ x=0; bool flag=1; char tmp=getchar(); while(!isdigit(tmp) or tmp=='-') tmp=getchar(); if(tmp=='-') flag=0; while(isdigit(tmp)) { x=x*10+tmp-'0'; tmp=getchar(); } if(flag==0) x=-x;}bool check(int nowans){ int sum=0; for(int i=1;i<=totdays;++i) { s[i]=0; } for(int i=1;i<=nowans;++i) { s[lender[i].TimeStart]+=lender[i].LendNum; s[lender[i].TimeEnd+1]-=lender[i].LendNum; } for(int i=1;i<=totdays;++i) { sum+=s[i]; if(sum>maxlend[i]) { return 0; } } return 1;}int main(){ ios::sync_with_stdio(false); read(totdays);read(totlend); for(int i=1;i<=totdays;++i) { read(maxlend[i]); } for(int i=1;i<=totlend;++i) { read(lender[i].LendNum); read(lender[i].TimeStart); read(lender[i].TimeEnd); } int L=1; int R=totlend; int mid; while(L<=R) { mid=(L+R)>>1; if(check(mid)==0) { ans=mid; R=mid-1; } else { L=mid+1; } } if(ans==0) { cout<<ans<<endl; } else { cout<<"-1"<<endl; cout<<ans<<endl; }}
阅读全文
0 0
- 【题解】CodeVS1217 NOIP2011D2T2借教室
- 【NOIP2012】codevs1217 借教室
- codevs1217 luogu1083 借教室
- NOIp2012借教室题解
- [noip2012]借教室 题解
- 【codevs1217】【noip2012提高day2T2】借教室——线段树做法
- [codevs 1217]借教室 题解
- tyvj 2075 借教室 题解
- 【noip2016】换教室 题解
- [noip2016]换教室 题解
- 借教室
- 借教室
- 借教室
- 借教室
- 借教室
- BZOJ4720(NOIP2016)[换教室]题解--期望DP
- [luogu-1850]noip2016day1-T3 换教室 题解
- Wikioi-1217-借教室
- CodeForces
- VS2012中C++,#include无法打开自己所写的头文件(.h)
- 判断第几次进入主页面
- 动态内存分配练习
- 关于log4j的精华配置
- 【题解】CodeVS1217 NOIP2011D2T2借教室
- CodeForces 825A Multi-judge Solving(阅读题)
- dynamic sets
- 最近公共祖先LCA倍增算法
- 常用Linux命令
- JavaWeb学习总结(一):Cookie
- mybatis根据传入参数进行更新
- VC6.0+XT库+OPENCV1.0调试笔记
- 报表的动态明细行的前端显示 C# ASP.net