USACO 3.4 American Heritage

TASK: heritage
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 3020 KB]
   Test 2: TEST OK [0.000 secs, 3020 KB]
   Test 3: TEST OK [0.000 secs, 3020 KB]
   Test 4: TEST OK [0.000 secs, 3020 KB]
   Test 5: TEST OK [0.000 secs, 3020 KB]
   Test 6: TEST OK [0.000 secs, 3020 KB]
   Test 7: TEST OK [0.000 secs, 3020 KB]
   Test 8: TEST OK [0.000 secs, 3020 KB]
   Test 9: TEST OK [0.000 secs, 3020 KB]

All tests OK.

1 /*
2 PROG: heritage
3 ID: jiafeim1
4 LANG: C++
5  */
6
7 #include <stdio.h>
8 #include <string.h>
9 char pre[35];
10 char mid[35];
11 int len,cur;
12 FILE *fin,*fout;
13 void work(int pres, int pree,int mids,int mide)
14 {
15 if(mids==mide)
16 {
17 fprintf(fout,"%c",mid[mids]);
18 return;
19 }
20 int root;
21 for(int i = mids;i<=mide;++i)
22 {
23 if(pre[pres]==mid[i])
24 {
25 root = i;
26 break;
27 }
28 }
29 if(mids<=root-1)
30 work(pres+1,pres+root-mids-1,mids,root-1);
31 if(mide>=root+1)
32 work(pres+root-mids+1,pres+root-mids+pree-root,root+1,mide);
33 fprintf(fout,"%c",mid[root]);
34 }
35
36
37 int main()
38 {
39 fin = fopen("heritage.in", "r");
40 fout = fopen("heritage.out", "w");
41
42 cur = 0;
43 fscanf(fin,"%s",mid);
44 fscanf(fin,"%s",pre);
45 len = strlen(pre);
46
47 work(0,len-1,0,len-1);
48
49 fprintf(fout,"\n");
50
51 fclose(fin);
52 fclose(fout);
53 return 0;
54 }
posted @ 2011-05-30 20:26  幻魇  阅读(263)  评论(0编辑  收藏  举报