洛谷P1083 [NOIP 2012 提高组] 借教室 题解
1.洛谷P1028 [NOIP 2001 普及组] 数的计算 题解2.洛谷P1464 Function 题解3.洛谷P2440 木材加工 题解4.洛谷P2678 [NOIP 2015 提高组] 跳石头 题解5.洛谷P1314 [NOIP 2011 提高组] 聪明的质监员 题解
6.洛谷P1083 [NOIP 2012 提高组] 借教室 题解
7.洛谷P1902 刺杀大使 题解8.洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树 题解9.洛谷P2280 [HNOI2003] 激光炸弹 题解10.洛谷P8218 【深进1.例1】求区间和 题解11.洛谷 P1719 最大加权矩形 题解12.洛谷 P2367 语文成绩 题解13.洛谷P1387 最大正方形 题解14.洛谷P1014[NOIP 1999 普及组] Cantor 表 题解15.洛谷P1563 [NOIP 2016 提高组] 玩具谜题 题解16.洛谷P4924 [1007] 魔法少女小Scarlet 题解17.洛谷P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two 题解18.洛谷P1786 帮贡排序 题解19.洛谷P1990 覆盖墙壁 题解20.洛谷P1010 [NOIP 1998 普及组] 幂次方 题解21.洛谷P1259 黑白棋子的移动 题解22.洛谷P1281 书的复制 题解23.洛谷P1396 营救 题解24.洛谷PP1570 KC 喝咖啡25.洛谷P1661 扩散 题解26.洛谷P1843 奶牛晒衣服 题解P1083 [NOIP 2012 提高组] 借教室 题解
题目
题解
思路
这一题可以使用差分优化+二分答案法做。
二分查找一个值\(x\),代表前\(x\)个订单是否满足条件,每次在循环中调用一个函数\(check(int\ x)\),用于检测前\(x\)个订单是否可以满足。
\(check\)函数细节思路:使用差分数组\(c\)存档前\(e_i+1_{max}\)天的租借教室情况,后面存档完毕后再将\(c\)进行前缀和,这样就得出了最终租借教室每天的租借数量了。随后就是for循环比较,如果有任意一天超过了预期\(r_i\)就返回false(代表不满足条件)最后返回true(代表前\(x\)个订单可以完全满足)。
在二分循环内,若\(check\)返回false,代表无法承受前\(x\)个订单的租借,于是得减小租借量(\(r=mid\)),否则就是可以完全满足,要尽可能满足更多的订单,所以需要把\(l\)赋值为\(mid\)。
代码
#include<bits/stdc++.h> #define endl '\n' using namespace std; long long n,m,r[1000005],d[1000005],s[1000005],e[1000005],c[1000005]; inline bool check(long long x){ memset(c,0,sizeof c); long long mxe=-1; for(long long i=1;i<=x;i++){ c[s[i]]+=d[i]; c[e[i]+1]-=d[i]; mxe=max(mxe,e[i]+1); } for(long long i=1;i<=mxe;i++){ c[i]=c[i-1]+c[i]; } for(long long i=1;i<=mxe;i++){ if(c[i]>r[i]) return 0; } return 1; } int main(){ cin>>n>>m; for(long long i=1;i<=n;i++) cin>>r[i]; for(long long i=1;i<=m;i++) cin>>d[i]>>s[i]>>e[i]; long long l=0,r=m+1; while(l+1<r){ long long mid=(l+r)/2; if(check(mid)) l=mid; else r=mid; } if(l==m) cout<<0<<endl; else cout<<-1<<endl<<l+1<<endl; return 0; }
总结
注意:如果你在第21个测试点WA了,请检查你的数据类型是否设置为long long。
这道题考察的知识面较广,很适合同学们锻炼思维用。
本文作者:2789617221guo
本文链接:https://www.cnblogs.com/2789617221guo/p/18703214
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步