Uva--10152 (线性表,思维)

2014-06-16 16:55:39

题意&思路:题意不赘述。思路:一开始的思路比较奇葩。。。后来想想并非最优。而应该从底部向上开始考虑(因为只有与第二堆底部一致的元素不用crawl),严格按照第二堆底部向上的顺序,看看第一堆中有多少个元素的顺序已经符合第二堆,剩下的元素都需要crawl,然而怎么找出这些需要crawl的元素呢。哈哈,就是第二堆中最后一个匹配元素上面的所有元素,然后按照有下到上的顺序crawl就能达到所需顺序,而且这样一定是最优的(因为只是将需要移动的序列元素各移动一次)(想一想)

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <iostream>
 5 using namespace std;
 6 
 7 struct Node{
 8     char s[105];
 9 };
10 
11 Node node1[205],node2[205];
12 
13 int main(){
14     char t;
15     int Case,n;
16     scanf("%d",&Case);
17     while(Case--){
18         scanf("%d",&n);
19         getchar();
20         for(int i = 0; i < n; ++i){
21             int cnt = 0;
22             while(t = getchar()){
23                  if(t == '\n') break;
24                  node1[i].s[cnt++] = t;
25             }
26             node1[i].s[cnt] = '\0';
27         }
28         for(int i = 0; i < n; ++i){
29             int cnt = 0;
30             while(t = getchar()){
31                 if(t == '\n') break;
32                 node2[i].s[cnt++] = t;
33             }
34             node2[i].s[cnt] = '\0';
35         }
36         int pos = n - 1;
37         for(int i = n - 1; i >= 0; --i){
38             if(strcmp(node1[i].s,node2[pos].s) == 0)
39                 --pos;
40         }
41         for(int i = pos; i >= 0; --i)
42             printf("%s\n",node2[i].s);
43         puts("");
44     }
45     return 0;
46 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/3791293.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值