• UVa 11988


    刘汝佳的题目,悲剧文本 -_-|||

    这里使用vector<string>容器倒置记录数据,然后从后面输出就能够了。

    难度就是不知道这种文档究竟哪里是開始输出,故此使用动态管理内存的容器比較好做。

    添加了io处理的O(n)算法也没有上榜,郁闷。

    #include <stdio.h>
    #include <vector>
    #include <string>
    using std::vector;
    using std::string;
    
    const int MAX_B = 5120;
    int id = 0, len = 0;
    char buf[MAX_B];
    
    inline char getFromBuf()
    {
    	if (id >= len)
    	{
    		len = fread(buf, 1, MAX_B, stdin);
    		id = 0;
    	}
    	return buf[id++];
    }
    
    int oid = 0;
    int FLASH_P = MAX_B - 2;
    char outBuf[MAX_B];
    
    inline void charToBuf(char c)
    {
    	if (oid > FLASH_P)
    	{
    		fwrite(outBuf, 1, oid, stdout);
    		oid = 0;
    	}
    	outBuf[oid++] = c;
    }
    
    inline void flashLeft()
    {
    	if (oid) fwrite(outBuf, 1, oid, stdout);
    }
    
    int main()
    {
    	char c;
    	while (c = getFromBuf())
    	{
    		if (!len) break;
    		vector<string> vstr(1);	
    		int cur = 0;
    		int end = 0;
    		while (len && c != '
    ')
    		{
    			if (c == '[')
    			{
    				vstr.push_back(string());
    				end++;
    				cur = end;
    			}
    			else if (c == ']')
    			{
    				if (vstr.size() > 1 && vstr[vstr.size()-1].empty())
    					end--, vstr.pop_back();
    				cur = 0;
    			}
    			else vstr[cur].push_back(c);
    			c = getFromBuf();
    		}
    
    		for (int i = (int)vstr.size() - 1; i >= 0 ; i--)
    		{
    			for (int j = 0; j < (int)vstr[i].size(); j++)
    			{
    				charToBuf(vstr[i][j]);
    			}
    		}
    		charToBuf('
    ');
    	}
    	flashLeft();
    	return 0;
    }


  • 相关阅读:
    P1017 进制转换
    P1100 高低位交换
    P1469 找筷子
    P1866 编号
    SQL常用语句(T-SQL、PL/SQL)
    Proxyer内网穿透配置教程
    使用JS检测自定义协议是否存在
    C# 代码启动ClickOnce应用
    SQL Server 异地备份到远程共享文件夹异常处理
    发布ClickOnce应用程序步骤与URL传参应用
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3934618.html
Copyright © 2020-2023  润新知