CERC 2009 Cav 扫描法 (uvaLive 4621 - Cav)
来源:互联网 发布:万学海文考研 知乎 编辑:程序博客网 时间:2024/06/07 22:11
/*问题等价于对每一格(横坐标跨度为1)求出可行的最大水位,然后累加每一位置。*/#include<bits/stdc++.h>#define all(x) (x).begin(), (x).end()#define rep(i,n) for(int i=0 ;i<(n) ;i++)using namespace std;typedef long long ll;const int INF =0x3f3f3f3f;const int maxn=1e6 ;int n,d[maxn+10],u[maxn+10],h[maxn+10];void read(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&d[i]); } for(int i=1;i<=n;i++) { scanf("%d",&u[i]); }}void work(){ //首先从左往右扫,处理好每个格子与左边的关系。 int level=u[1];//一开始让水位尽可能大 for(int i=1;i<=n;i++) { if(level<d[i]) level=d[i];//如果...那么这时此处必须没水,否则淹没左边区域。 else if(level>u[i]) level=u[i];//此处被左边淹没,要求下降水位。 h[i]=level;//这个是考虑格子i左边 得出的格子i可行的最大水位。 } level=u[n]; int ans=0; for(int i=n;i>=1;i--) { if(level<d[i]) level=d[i]; else if(level>u[i]) level=u[i]; ans+=min(level,h[i])-d[i]; } printf("%d\n",ans);}int main(){ int T;scanf("%d",&T); while(T--) { read(); work(); } return 0;}
0 0
- CERC 2009 Cav 扫描法 (uvaLive 4621 - Cav)
- UVALive - 4621 Cav
- Cav
- UVALive - 4621 Cav 贪心 + 分析
- 1442 - Cav(扫描+推理)
- 1442 - Cav
- 1442 - Cav
- LA4621 Cav
- Cav UVA
- Cav UVA
- uva 1442 Cav(左右各扫描一次)
- UVA - 1442 Cav
- UVa OJ 1442 - Cav
- UVA-1442 Cav
- uva 1442 - Cav(贪心)
- uva - 1442(cav 递推类 ,思路)
- UVa 1442:Cav(杂题)
- 1st Air Cav Shifts Tactics, Enables Iraqis to Complete Mission
- 12. Integer to Roman
- lintcode:Unique Binary Search Trees II
- cf19B. Checkout Assistant 【01 背包】
- android的消息机制
- Hive与HBase的区别
- CERC 2009 Cav 扫描法 (uvaLive 4621 - Cav)
- 修正后的时间类
- socket server 服务端 带计算心跳。超时断链的控制
- block,inline和inline-block概念和区别
- 第五周项目1-三角形类的雏形(5)
- 封装
- 确定两个字符串通过重新排序是否可以相同的算法
- 自定义EL函数防止HTML注入
- C++第3次实验(基础班)—选择结构程序设计