首页 > 其他分享 >hdoj 展开字符串 1274 (字符串递归) 好题

hdoj 展开字符串 1274 (字符串递归) 好题

时间:2023-04-28 11:08:14浏览次数:38  
标签:abc int 1274 好题 纱线 括号 ACM 字符串 include


展开字符串


Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2116    Accepted Submission(s): 1017



Problem Description


在纺织CAD系统开发过程中,经常会遇到纱线排列的问题。
该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc表示三根纱线的排列;重复可以用数字和括号表示,例如:2(abc)表示abcabc;1(a)=1a表示a;2ab表示aab;如果括号前面没有表示重复的数字出现,则就可认为是1被省略了,如:cd(abc)=cd1(abc)=cdabc;这种表示方法非常简单紧凑,也易于理解;但是计算机却不能理解。为了使计算机接受,就必须将简单紧凑的表达方式展开。某ACM队接受了此项任务。现在你就是该ACM队的一员,请你把这个程序编写完成。
已知条件:输入的简单紧凑表达方式的长度不超过250个字符;括号前表示重复的数不超过1000;不会出现除了数字、括号、小写字母以外的任何其他字符;不会出现括号不配对等错误的情况(错误处理已由ACM其他队员完成了)。




Input


本题有多个测试数据组,第一行输入的就是数据组数N,接着就是N行表达式,表达式是按照前面介绍的意义书写的。




Output


输出时含有N行,每行对应一个输入的表达式。




Sample Input


2 1(1a2b1(ab)1c) 3(ab2(4ab))




Sample Output


abbabc abaaaabaaaababaaaabaaaababaaaabaaaab


#include<stdio.h>
#include<string.h>
#include<iostream> 
#include<algorithm>
using namespace std;
char s[50010];
int l;
int solve(int p)
{
	while(s[p]!=')'&&p<l)
	{
		int t=0;
		while(isdigit(s[p]))//isdigit()函数用来判断字符是否为数字,若是返回true,否则返回NULL(0) 
			t=t*10+s[p++]-'0';
		if(t==0)
			t++;
		int x=-1;
		while(t--)
		{
			if(s[p]=='(')
				x=solve(p+1);
			else
				printf("%c",s[p]);
		}
		if(x!=-1)
			p=x;
		p++;
	}
	return p;
}
int main()
{
	int t;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		memset(s,'\0',sizeof(s));
		gets(s);
		l=strlen(s);
		solve(0);
		printf("\n");
	}
	return 0;
}

 

 

标签:abc,int,1274,好题,纱线,括号,ACM,字符串,include
From: https://blog.51cto.com/u_16079508/6233567

相关文章

  • LAoj 3695 - Distant Galaxy (DP&几何)好题高效
    YouareobservingadistantgalaxyusingatelescopeabovetheAstronomyTower,andyouthinkthatarectangledrawninthatgalaxywhoseedgesareparalleltocoordinateaxesandcontainmaximumstarsystemsonitsedgeshasagreatdealtodowiththemys......
  • c语言中,字符数组名 与 指向字符串常量的指针之间的关系
    chara[]="hello";//定义一个字符数组a,constchar*b="hello";//定义一个指向字符的指针b,指向字符串常量的第一个字符的首地址区别:a是一个指针常量,它本身的值不能修改,即char*consta;b是一个常量指针,它所指向的值不能修改,constchar*b;......
  • C语言处理特定字符串
    C语言处理特定字符串在使用NiosIDE实现串口助手向NiosII系统发送数据时,再将数据发送至FPGA逻辑模块,以此控制LED灯。在串口助手中发送14568936的数据,Nios接收到的数据是形如"14568936\r\n"的字符串,默认以\r\n结尾,要将此字符串转化为四个整型数据。#include<stdio.h>......
  • Python字符串比较
    python中的字符串之间比较是依次比较每个字符的原始值(ordinalvalue)的大小,可以使用ord0方法查看某个字符的原始值,直到两个字符串中的字符不相等时,后续字符将不再被比较print('xnjilhntm'=='xnjilhntm')#Trueprint('xnjilhntm'<'xnjilhntz')#True   ord('m') 109,ord('z......
  • 每日打卡java字符串
    importcom.ith.demo1.main;importcom.ith.demo1.phone;importjava.util.ArrayList;importjava.util.Scanner;importjava.util.StringJoiner;//PressShifttwicetoopentheSearchEverywheredialogandtype`showwhitespaces`,//thenpressEnter.Youcannows......
  • 1048. 最长字符串链
    题目描述给了一个单子数组words给了字母前身的定义:A在任何地方加一个字符,凑成B,A就是B的前身问从words中怎么选,能构成最长的词链?f1-记忆化搜索基本分析怎么找到子问题?假如s是词链的最后一个单词,那么枚举去掉s某位后的构成新的词s-1,s-1就是s的更小一级的子问题dfs怎么实现?......
  • 力扣---1048. 最长字符串链
    给出一个单词数组 words ,其中每个单词都由小写英文字母组成。如果我们可以 不改变其他字符的顺序 ,在wordA 的任何地方添加恰好一个字母使其变成 wordB ,那么我们认为 wordA 是 wordB 的前身。例如,"abc" 是 "abac" 的前身 ,而 "cba" 不是 "bcad" 的前身......
  • Python-字符串format方法指定参数
    一、字符串的format方法有几种指定参数的方式:(1)默认方式—传入的参数与{}一一对应(2)命名参数(3)未知参数{2}二、详细描述字符串的format方法如何格式化字符串:第一种方法:s1='Todayis{},thetemperatureis{}degrees.'print(s1.format('Saturday',24))第二种方法:s2='To......
  • 最长不含重复字符的子字符串
    classSolution{public:intlongestSubstringWithoutDuplication(strings){intlen=0,n=s.size(),cnt[30];memset(cnt,0,sizeofcnt);for(inti=0,j=0;j<n;j++){cnt[s[j]-'a']++;......
  • mysql 查询某字段中以逗号分隔的字符串的方法
    mysql查询某字段中以逗号分隔的字符串的方法文章目录mysql查询某字段中以逗号分隔的字符串的方法前言https://cdnvue.gymcity.com.cn/betterwe_1.0/userlogo/userlogopro62d8bf98afde709d37c08f7b129e96277388757530c72.png一、首先讲一个需求总结前言现在有如下场景。我们有一个......