zoukankan      html  css  js  c++  java
  • [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;
    }
    

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

  • 相关阅读:
    常见的块级元素和内联(行内)元素
    全屏滚动插件fullPage的使用
    Git使用规范
    MinIO使用教程(待完成)
    [Flutter] CachedNetworkImage加载图片证书校验失败
    [Flutter] 扩展一个支持弹出菜单的IconButton
    [Node.js] 后端服务导出CSV数据流给前端下载
    下载 VMware Tools (VMware 16)
    [Flutter] 在Windows平台中使用VS2019调试win插件
    c#CSV文件生成
  • 原文地址:https://www.cnblogs.com/ShuraK/p/8666417.html
Copyright © 2011-2022 走看看