2016广东工业大学校赛 E题 GDUT-oj1173

Problem E: 积木积水

Description

现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水。小明又是如此地喜欢二次元,于是他把这个三维的现实问题简化成二维的问题。设雨量无穷、积木不透水、积木间无缝连接,问在这个二次元的世界里,已放置好的积木会有多少单位的积水量?

Input

第一行包含一个整数T(T≤100),表示接下来的测试样例个数。 每个测试样例有两行组成: 第一行包含一个整数N(N≤1e6),表示积木的列数; 第二行包含N个整数Ai(Ai≤1e6),表示第i列积木的个数。

Output

每个样例输出一行,包含一个整数,为题目所求。

Sample Input

1

11

6 2 2 4 2 0 3 4 4 5 1

Sample Output

19

题意:搭好积木 能装多少水? 题目很好理解

题解:刚开始思路错误 想着不断寻找最高积木与次高积木 然后判断之间能存多少水 TLE

AC 代码 考虑每一列积木能贡献多少积水 记录当前列的左max与右max

然后遍历答案ans+=min(l[i],r[i])-a[i];

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<stack>
 7 #include<map>
 8 #include<set>
 9 #define ll long long
10 #define Pi acos(-1.0)
11 #define mod 1
12 #define MAX 100000
13 #define bug(x) printf("%d************\n",x);
14 using namespace std;
15 #define ll long long
16 int a[1000010];
17 int r[1000010];
18 int l[1000010];
19 int main()
20 {
21     int x,y,z,i,t;
22     scanf("%d",&x);
23     while(x--)
24     {
25         memset(l,0,sizeof(l));
26         memset(r,0,sizeof(r));
27         scanf("%d",&y);
28         for(i=0;i<y;i++)
29         scanf("%d",&a[i]);
30         int maxx=0;
31         for(i=1;i<y;i++)
32         {
33             maxx=max(maxx,a[i-1]);
34             l[i]=maxx;
35         }
36         maxx=0;
37         for(i=y-2;i>=0;i--)
38         {
39             maxx=max(maxx,a[i+1]);
40             r[i]=maxx;
41         }
42         ll ans=0;
43         for(i=0;i<y;i++)
44         {
45             if(min(l[i],r[i])>a[i])
46             ans+=min(l[i],r[i])-a[i];
47         }
48         printf("%lld\n",ans);
49     }
50     return 0;
51 }
52
53 /**************************************************************
54     Problem: 1173
55     User: 853665920
56     Language: C++
57     Result: Accepted
58     Time:624 ms
59     Memory:13496 kb
60 ****************************************************************/
时间: 2024-12-17 08:15:39

2016广东工业大学校赛 E题 GDUT-oj1173的相关文章

2016广东工业大学校赛 D题 GDUT-oj1172

Problem D: 二叉树的中序遍历 Description 对于学过数据结构的人来说,二叉树和二叉树上的中序遍历都是再简单不过的东西了.这道题就搞搞二叉树好了,当然,不是一般的二叉树:) 我们定义一种a二叉树,它的节点内容可以是任一个数字或者#,#只能作为叶子节点的内容. 如下就是一棵合法定义的a二叉树1: 再来一棵不合法的a二叉树2: (根节点的左儿子的内容是#,因此不应该有一个左儿子3) 对于a二叉树1,我们可以进行对他进行中序遍历,得到序列(1)#4112#37:对于a二叉树2,可以得

HDU 5880 Family View (2016 青岛网络赛 C题,AC自动机)

题目链接  2016 青岛网络赛  Problem C 题意  给出一些敏感词,和一篇文章.现在要屏蔽这篇文章中所有出现过的敏感词,屏蔽掉的用$'*'$表示. 建立$AC$自动机,查询的时候沿着$fail$指针往下走,当匹配成功的时候更新$f[i]$ $f[i]$表示要屏蔽以第$i$个字母结尾的长度为$f[i]$的字符串. 原文地址:https://www.cnblogs.com/cxhscst2/p/8452147.html

2016年 河南工业大学校赛 A题.饶学妹的比赛

饶学妹的比赛 时间限制: 1 秒  内存限制: 64 MB  |  提交: 385  解决: 120 题目描述 饶学妹组织了一场ACM赛制的比赛,大家纷纷慕名来参加.比赛中大家交题只会有两种结果:AC,WA.比赛结束了,饶学妹制作榜单啦.首先按AC题目的数目(重复AC一道题只算一次)从多到少排名:AC题目数目相同的同学按罚时(罚时计算方式为:单题罚时 = (首次AC该题目时间 + 首次AC之前WA的次数 * 20) min,总罚时 = 各题罚时之和:即某题目AC之后,对这道题目后续的提交均不计入

2016年 河南工业大学校赛 C题.魔法宝石

魔法宝石 时间限制: 2 秒  内存限制: 64 MB  |  提交: 582  解决: 187 题目描述 小s想要创造n种魔法宝石.小s可以用ai的魔力值创造一棵第i种魔法宝石,或是使用两个宝石合成另一种宝石(不消耗魔力值).请你帮小s算出合成某种宝石的所需的最小花费. 输入 第一行为数据组数T(1≤T≤3). 对于每组数据,首先一行为n,m(1≤n,m≤10^5).分别表示魔法宝石种类数和合成魔法的数量. 之后一行n个数表示a1到an.(1≤ai≤10^9).a_i表示合成第i种宝石所需的魔

2016年 河南工业大学校赛 D题.rqy的键盘

rqy的键盘 时间限制: 1 秒  内存限制: 128 MB  |  提交: 233  解决: 136 题目描述 rqy在和妹子约会,突然女票打来电话.rqy骗女票他在写代码.女票为了证实,问他键盘上F键左边是哪个键. 你能否帮助rqy回应女票的质问?不然他可就要写思想汇报了... 输入 输入数据第一行是一个整数 T(1≤T≤10000),表示测试数据的组数. 之后每一行先是一个大写字母X ,之后为一个字符串Left或Right,分别表示询问X键的左边或右边是哪个键. 输出 如果结果为一个字母键

2016年 河南工业大学校赛 H题.ch追妹

ch追妹 时间限制: 2 秒  内存限制: 128 MB  |  提交: 241  解决: 119 题目描述 n个点的一张无向图,ch站在a点,ch要追的妹子站在b点.r_clover为了让ch安心训练,要阻止ch追妹.ch每走一步,r_clover就会挖断一条路.ch和r_clover均采用最优策略,问ch能不能追到妹子 输入 第一行为数据组数T(T≤10). 每组数据的第一行为四个数 n,m,a,b(1≤a,b≤n≤20; 1≤m≤80),分别表示点数,边数,ch的位置,妹子的位置. 之后m

HDU 5886 Tower Defence(2016青岛网络赛 I题,树的直径 + DP)

题目链接  2016 Qingdao Online Problem I 题意  在一棵给定的树上删掉一条边,求剩下两棵树的树的直径中较长那的那个长度的期望,答案乘上$n-1$后输出. 先把原来那棵树的直径求出来.显然删掉的边不是这条直径上的边,那么这时答案就是这条直径的长度. 否则就是直径的某个端点到某一个点(要求连通)的距离的最大值. 在整条链上做两次$DP$之后枚举取较大值即可. #include <bits/stdc++.h> using namespace std; #define r

2016湖大校赛 L题 The Sequence likes Ladder

题意:S1=a,Sn=a*(Sn-1)^k%m,且有(a,m)=1,给出i,求Si. 思路:首先我们可以写出Sn的通项a^(1+k+k^2+...k^n-1);其次注意到m的范围是10000以内,所以我们可以利用欧拉公式降幂. 注意到(a,m)=1;又欧拉定理可知a^x%m=a^(x%phi(m))*a^phi(m)%m,而a^phi(m)=1;所以 a^x%m=a^(x%phi(m))%m; 而幂是一个等比数列,可以利用快速矩阵幂计算,算出幂之后,再利用快速幂求出答案. #include<cs

2016广东省省赛H题

题意:计算: ∑i=1n∑j=1mi2j2gcd(i,j) (时限1000ms) input: T(t<=1000),接下来t行,m,n(n,m<1e6). 题目难点在于多了i,j的平方,由对称性,设n < m,可以这样化简: =====d′=kd===∑i=1n∑j=1mi2j2gcd(i,j)∑i=1n∑j=1m∑d|i,d|ji2j2d[(id,jd)=1]∑d=1n∑i=1?nd?∑j=1?md?i2j2d5[(i,j)=1]∑d=1n∑i=1?nd?∑j=1?md?i2j2d5