• [poj1068]Parencodings_模拟


    Parencodings

        题目大意:给你一个P序列,表示从左到右的右括号左边有多少左括号,求M序列。

        注释:M序列定义为每一个右括号左边最近的没有被之前的右括号匹配的括号之间,有多少已经匹配的括号队对。$1le number for Ple 20$。

          想法:暴力模拟。我们定义dis[i]表示第i-1个右括号到第i个右括号之间有多少可以直接使用的左括号。

            然后我们从当前节点向之前查找,起一个dis大于0的将这个dis-1,并且输出M[i]=i-j+1.(i是当前右括号,j是dis不为0的编号)。

        最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int a[25];//P数组
    int dis[25];
    int val[25];//M数组
    int main()
    {
    	int cases;
    	scanf("%d",&cases);
    	while(cases--)
    	{
    		//original();不用初始化,因为我们都是重新覆盖所有的数组
    		int n;
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++)//其实这题可以在线处理,但是内存又不卡,离线得了
    		{
    			scanf("%d",&a[i]);
    		}
    		for(int i=1;i<=n;i++)
    		{
    			dis[i]=a[i]-a[i-1];//处理dis数组
    		}
    		for(int i=1;i<=n;i++)
    		{
    			for(int j=i;j>=1;j--)//find,找到一个合法的dis,然后更新val数组
    			{
    				if(dis[j])
    				{
    					dis[j]--;
    					val[i]=i-j+1;
    					break;
    				}
    			}
    		}
    		for(int i=1;i<=n;i++)
    		{
    			printf("%d ",val[i]);
    		}
    		puts("");
    	}
    	return 0;
    }
    

         小结:其实这是个大垃圾题,主要的目的是.... .... 哈哈,没错,我的分类还没有题,想先敲一道垫个底!

  • 相关阅读:
    观后感(追番记)...
    网络流24题
    动物园
    [HNOI2016]网络
    部落战争(最小路径点覆盖)
    P4313 文理分科(最小割)
    P2774 方格取数问题(最小割)
    P2472 [SCOI2007]蜥蜴(最大流)
    P1231 教辅的组成(最大流)
    最短路计数(SPFA× Dijkstra√)
  • 原文地址:https://www.cnblogs.com/ShuraK/p/8666417.html
Copyright © 2020-2023  润新知