OUC_Summer Training_ DIV2_#4之数据结构

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26100#problem/A

A - A
Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u
Submit  Status  Practice  POJ 1936

Description

You have devised a new encryption technique which encodes a message by inserting between its characters randomly generated strings in a clever way. Because of pending patent issues we will not discuss in detail how the strings are generated and inserted into the original message. To validate your method, however, it is necessary to write a program that checks if the message is really encoded in the final string. 

Given two strings s and t, you have to decide whether s is a subsequence of t, i.e. if you can remove characters from t such that the concatenation of the remaining characters is s. 

Input

The input contains several testcases. Each is specified by two strings s, t of alphanumeric ASCII characters separated by whitespace.The length of s and t will no more than 100000.

Output

For each test case output "Yes", if s is a subsequence of t,otherwise output "No".

Sample Input

sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter

Sample Output

Yes
No
Yes
No
 
 1 //是很简单的题啦  但是我数组开的有点小 总是runtime error
 2 #include<stdio.h>
 3 #include<string.h>
 4 char a[100010];
 5 char b[100010];
 6 int main()
 7 {
 8     int i,j,na,nb,t = 0,m = 0;
 9     char c;
10     while(scanf("%s",a) != EOF)
11     {
12         scanf("%s",b);
13         na = strlen(a);
14         nb = strlen(b);
15         for(i = 0;i < na;i++)
16         {
17             for(j = t;j < nb;j++)
18             {
19                 if(a[i] == b[j])
20                 {
21                     m++;
22                     t = j + 1;
23                     break;
24                 }
25             }
26         }
27         if(m == na )printf("Yes\n");
28         else printf("No\n");
29         m = 0;
30         t = 0;
31     }
32     return 0;
33 }
View Code
B - B
Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u
Submit  Status  Practice  POJ 1068

Description

Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: 
q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence). 
q By an integer sequence W = w1 w2...wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence). 

Following is an example of the above encodings: 

S (((()()())))
P-sequence 4 5 6666
W-sequence 1 1 1456

Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string. 

Input

The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 <= n <= 20), and the second line is the P-sequence of a well-formed string. It contains n positive integers, separated with blanks, representing the P-sequence.

Output

The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.

Sample Input

2
6
4 5 6 6 6 6
9 
4 6 6 6 6 8 9 9 9

Sample Output

1 1 1 4 5 6
1 1 2 4 5 1 1 3 9

 

 
 1 //先把括号的情况还原,在用递归的方法给括号配对,递归不是很熟练,虽然很简单,写了好几遍才对。
 2 #include<stdio.h>
 3 char y[10000];    
 4 int w[50],n,l,j;
 5 int f()
 6 {
 7     int s=1;
 8     while(1)
 9         if(y[j]=='(')
10         {
11             j++;
12             s+=f();
13         }
14         else
15         {
16             w[l++]=s;
17             j++;
18             return s;
19         }
20 }
21 int main()
22 {
23     int N,i,k,m;
24     scanf("%d",&N);
25     while(N--)
26     {
27         scanf("%d",&n);
28         for(i=0,l=0,k=0;i<n;i++)
29         {
30             scanf("%d",&m);
31             for(j=0;j<m-k;j++)
32                 y[l++]='(';
33             y[l++]=')';
34             k=m;
35         }
36         l=j=0;
37         f();
38         for(i=0;i<n;i++)
39             printf("%d ",w[i]);
40         printf("\n");
41     }
42     return 0;
43 }
View Code

 

转载于:https://www.cnblogs.com/lwy-kitty/p/3194249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值