题目大意
一个序列s,题目定义两种编码方式:
第一种方式是p,其中pi表示第i个右括号之前的左括号数;
第二种是w,其中wi表示第i个右括号(包括它本身)之前完成匹配的括号对数。
现给出序列s在p方式下的编码,求出它在w方式下的编码序列。
思路
已知条件是p序列,那就从p序列入手。
对于pi,设j<i,那么pi-pj的含义显然是第j个右括号与第i个右括号之间的左括号数。而且不难得知,wi能达到的最大值就是i-j,因为括号能匹配成功的前提是有富余的右括号。那么按照这个逻辑去枚举每一对(i,j)就行了。
代码
#include <cstdio> #include <iostream> using namespace std; int t, n; int str[110]; int main() { cin >> t; while(t--) { cin >> n; for(int i = 0; i < n; i++) { scanf("%d", &str[i]); int j = i - 1; while(str[i] - str[j] < i - j) j--; printf("%d ", i - j); } cout << endl; } return 0; }
评论
还没有任何评论,你来说两句吧!