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

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

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

 

posted @ 2013-07-16 20:08  lwy_kitty  阅读(285)  评论(0编辑  收藏  举报