题目名称 | 1407. [SHOI 2015]Discover Water Tank |
---|---|
输入输出 | discoverwatertank.in/out |
难度等级 | ★★★ |
时间限制 | 10000 ms (10 s) |
内存限制 | 128 MiB |
测试数据 | 5 |
题目来源 | cstdio 于2016-10-30加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:1, 提交:2, 通过率:50% | ||||
cstdio | 100 | 2.763 s | 12.90 MiB | C++ |
cstdio | 0 | 0.000 s | 0.33 MiB | C++ |
关于 Discover Water Tank 的近10条评论(全部评论) | ||||
---|---|---|---|---|
成功捕捉楼上!
白夜<=>黑天
2016-10-31 06:22
2楼
| ||||
做法比较奇怪,不是标准做法。
训练时没debug出来,身败名裂 |
discoverwatertank.in
输出文件:discoverwatertank.out
简单对比一个水箱里生活着许多青蛙,但它们不知道水箱里到底有多少水。
水箱的高度无限,但底部很窄。水箱(底面)的长度是N,但宽度仅为1.
水箱的底部有N-1块隔板,从而把它分成N个部分,每个部分的底面都是1*1。隔板的高度不同。隔板能阻挡水,但高于隔板的水当然可以自由流动,同我们的常识相符。
青蛙国王想了解水箱的更多细节,因此虵选取了M个位置,并派人查看这些位置是否被水淹没。
例如,每次他选取(x,y),检查水箱从左到右第x个部分,高度为y+0.5的位置是否被淹没。
现在国王有了M个结果,但他发现其中一些结果可能是错的。他想知道,其中最多有多少个结果是正确的。
第一行一个整数T,代表数据组数。接下来是T组数据。
每组数据的第一行是两个整数N,M,代表水箱被分成了多少个部分,以及结果的个数。
每组数据的第二行有N-1个整数h[1],h[2],...,h[N-1],代表每一块隔板的高度。
接下来的M行,每一行形如"x y z",如果第x个部分的y+0.5高度没有被淹没,则z=1,否则z=0。
对每组数据,输出"Case #x: y",其中x代表第几组数据(从1开始),y是最大可能的正确结果数。
2
3 4
3 4
1 3 1
2 1 0
2 2 0
3 3 1
2 2
2
1 2 0
1 2 1
Case #1: 3
Case #2: 1
对于第一组数据,如果第1个结果正确,则第一部分的3.5高度有水。水将越过高度为3的隔板,因此第二部分水的高度至少和第一部分相等,这就与第2和第3个结果相矛盾。
1<=T<=10
1<=N<=10^5,1<=M<=2*10^5
1<=h[i]<=10^9
1<=y<=10^9
2015ACM/ICPC亚洲区上海站-重现赛(感谢华东理工)