[luogu5423]Valleys】的更多相关文章

先考虑不要求有洞,那么可以将所有权值排序,然后不断插入,那么一个连通块就是一个答案,加上连通块大小即可考虑并查集如何判断是否有洞,可以发现对于任意一个无洞的直角多边形,都有$90度内角-90度外角=4$,而如果有洞显然就不是了(容易发现如果有k个洞,那么上述的值就应是$4-4k$)这个角度看上去很难维护,其实只需要考虑包含他的四个2*2的矩形即可(或者说这个新点的四个较上的角的变化),分类讨论:1.相邻的两个格子都没有,新增一个90度的内角2.相邻的两个格子恰有一个,减少一个90度的内角3.相邻…
P3456 [POI2007]GRZ-Ridges and Valleys 八个方向都跑一遍bfs,顺便判断一下是山峰还是山谷,或者是山坡(俩都不是) (实在不知道要说啥了qwq) #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #include<queue> using namespace std; inline int Int(){ ; while(…
题意翻译 给定一个地图,为小朋友想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是相邻的格子.(所以与(i,j)相邻的格子有(i-1, j-1),(i-1,j),(i-1,j+1),(i,j-1),(i,j+1),(i+1,j-1),(i+1,j),(i+1,j+1)).我们定义一个格子的集合S为山峰(山谷)当且仅当: 1.S的所有格子都有相同的高度. 2.S的所有格子都联通3.对于s属于S,与s相邻的s’不属于S.都有ws…
P3456 [POI2007]GRZ-Ridges and Valleys 题意翻译 给定一个地图,为小朋友想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是相邻的格子.(所以与(i,j)相邻的格子有(i-1, j-1),(i-1,j),(i-1,j+1),(i,j-1),(i,j+1),(i+1,j-1),(i+1,j),(i+1,j+1)).我们定义一个格子的集合S为山峰(山谷)当且仅当: 1.S的所有格子都有相同的高度…
Hills And Valleys 题意:给你一个序列, 可以翻转一次区间 [l, r] 求最大 非递减的 序列长度. 题解:枚举翻转区间,然后匹配. 如果不翻转区间, 那么就相当于用b[] = {0,1,2,3,...,7,8,9} 来匹配原序列, 可以重复匹配, 求最长的长度. 现在我们假设翻转b的 [3,5] 那么 新的b的序列就为 b[] = {0,1,2,3,5,4,3,5,6,7,8,9} 来匹配a序列,求最长的长度. 新的bn的序列最多就是C(10,2)次. dp[n][m] 代表…
把字符串数字化之后应该从 i>0开始判断而不是 i>1 因此错了4个testcases. #!/bin/python3 import math import os import random import re import sys # Complete the countingValleys function below. def countingValleys(n, s): s_num = [] for i in range(n): if s[i:i+1] == 'U': if i ==…
http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意 给一个数值范围为0-9的a数组,可以选择翻转一个区间,问非严格最长上升子序列,以及翻转的区间. 分析 官方题解的做法: 它把最长不下降子序列映射成两个序列的最长公共子序列问题 a序列就是给出的原序列 b序列是值域的序列 需要注意的是:b序列可以重复匹配 一般的最长不下降子序列中,b序列就是:0,1,2,3,4,5,6,7,8,9 这样a和b的最长公共子序列就是一个最长不下降子序列. 然后这题它说可…
传送门 题目大意 给定一个序列A,求翻转A中一个区间之后的最长不降子序列的长度即翻转的区间 分析 发现直接枚举翻转的区间的话是无论如何都不行的,于是有一个非常神奇的做法.我们再设一个序列B = {0,1,2,3,4,5,6,7,8,9},然后我们枚举翻转B中的哪一段,假设我们翻转[5,8]z这一段,则得到B' = {0,1,2,3,4,5,8,7,6,5,8,9},然后设dp[i][j]表示A考虑到第i个,B'考虑到第j个,直接dp转移即可.最终输出的翻转区间单独设数组然后一起转移就行了. 代码…
题目描述 思路 一开始看这道题目,也不是很会,谁会把统计之类的问题和bfs联系在一起,没有开始的状态,没有结束的状态,题目中连一个最短之类的词也没有出现. 然后统计嘛,题目中说了方格高度都相同,就把周围的点都看一遍和这个点高度相同的就入队,把高度相同的点都打上浏览的标记.看的过程中,既有比它小的,也有比它大的,那么这种高度的点就不是我们要统计的答案,只有比它小的,或只有比它大的,那么就是我们要统计的.可以设置两个标记,标记看的过程中有没有比它小的,比它大的. 然后就是只有一个高度的时候,因为两个…
题目传送门 题意: 给你0~9的字符串,问你翻转哪个区间后使得其最长不下降子序列长度最长 思路: 因为字符是0~9,所以我们可以定义一个b数组来枚举L,R, 去和原来的字符串去求最长公共子序列长度,不断更新求最大值 然后在其中记录路径,不断回缩去求此时的L,R 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; #define N 100005 ]; char str[N]; ],pre[N][]; in…