分析:

明显是一个栈的问题。利用栈后进先出的特点模拟火车进站出站的过程即可轻松解决。

我的思路是:

用2个字符数组保存火车车厢的序列。首先比较出站后(记为s2)数组和出站前 (记为s1)数组的第一个元素,会有以下3种情况:

1、元素相等,则说明这节车厢可以进站后马上出站,直接输出in,out,不需要执行真正的压栈操作。(当然你想压再出一下也行。。不过那是没有任何意义的)

2、元素不相同时,检查栈顶元素是否与s2相同,如果不同,则把s1当前元素压入栈中,输出in,并将s1的字符指针后移一位。

3、元素不相同时,检查栈顶元素是否与s2相同,如果相同,则执行出栈操作,输出out.

如果 s1已经全部压入栈中,而s2后面还有元素没有被比较过,则说明无法按照指定的序列重组火车,输出No

代码:(我写得有点复杂了,其实没这么麻烦的。。不要误导大家了,大家只看上面的思路分析就行 。。)

#include <stdio.h>
#include <string.h>
typedef struct /* »ð³µ¸÷½Ú³µÏáµÄÐòºÅ */
{char ID[15];int top;
}TRAIN;
typedef struct /* 为什么是乱码 */
{char ch[10];
}RESULT;
void to_str(int num,char *res,int len)/* °ÑÊäÈëµÄÕûÊýת»¯Îª×Ö·û´® */
{int ix;for(ix = len - 1 ; ix >= 0 ; --ix){res[ix] = num % 10 + 48; num /= 10; }
}
int get_digit(int num)/* µÃµ½ÕûÊýµÄλÊý */
{int res = 0;while(num){++res;num /= 10;}return res;
}
int main(int argc, char *argv[])
{TRAIN tn;RESULT res[20];tn.top = 0;char t1[10],t2[10];int len,before,after,len1,len2,i,j,len_res;while(scanf("%d%d%d",&len,&before,&after) != EOF){/* ³õʹ»¯ */len1 = get_digit(before);len2 = get_digit(after);memset(t1,0,sizeof(t1));memset(t2,0,sizeof(t2));to_str(before,t1,len1);to_str(after,t2,len2);len_res = 0;memset(res,0,sizeof(res));memset(&tn,0,sizeof(TRAIN));for(i = 0,j = 0 ; i <= len2 ; ++i){if(j > len2 - 1 && i > len2 - 1)  /* ³É¹¦ */{strcpy(res[len_res++].ch,"Yes.");/* ÒòΪҪÏÈÅжÏÄÜ·ñ³É¹¦£¬ËùÒÔÒª°ÑÖмä¹ý³ÌµÄ½ø³öÐÅÏ¢±£´æÆðÀ´ */break;}if(t2[i] != '\0' && j > len2 - 1 && t2[i] != tn.ID[tn.top])  /* ʧ°Ü */{strcpy(res[len_res++].ch,"NO.");tn.top = 0; break;}if(t2[i] != t1[j] && tn.ID[tn.top] != t2[i] && t2[i] != '\0'){tn.ID[++tn.top] = t1[j];++j;--i;strcpy(res[len_res++].ch,"in");}else if(t2[i] != t1[j] && tn.ID[tn.top] == t2[i]){tn.top--;strcpy(res[len_res++].ch,"out");}else if(t2[i] == t1[j]) /* ÈëվǰºÍÈëÕ¾ºó¶ÔÓ¦µÄ³µÏáºÅÏàµÈ£¬ÔòÏȽø£¬ÔÙÂíÉϳö */{++j;strcpy(res[len_res++].ch,"in");strcpy(res[len_res++].ch,"out");}}if(!strcmp(res[len_res - 1].ch,"Yes.")){printf("Yes.\n");for(i = 0 ; i < len_res - 1; ++i)printf("%s\n",res[i].ch);printf("FINISH\n");}elseprintf("No.\nFINISH\n");}return 0;
}

转载于:https://www.cnblogs.com/whongfei/archive/2012/10/28/5247026.html

【ACM】杭电1022:Train Problem I相关推荐

  1. 【HDOJ】1022 Train Problem I_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=1022 [报告] 模拟,直接模拟一个栈的运行就行了. [程序] // Task: 1022 Train P ...

  2. HDU 1022[Train Problem I] 栈的应用

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 题目大意:一列序列为s1的车厢是否能通过车站的中转以序列s2出站.白皮上有. 关键思想:栈的应用 ...

  3. hdu 1022 Train Problem I 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 其实是一道上数据结构课讲过的例题  只不过当时讲的是怎么用手算  一道水题又花了好长时间 其实就 ...

  4. 5410 ACM 杭电 01+完全背包

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5410 虽然是英文题目:但还是很好理解的.明显的背包问题 思路:如果你能想到把题目拆分成小问题,就会简单许多 ...

  5. 杭电 Prime Ring Problem

    解题思路: 题目是一道很典型的dfs搜索题目,思路很清晰,很容易想到.想组成这个素数环,要有n步,而每步都有n-i(i是变动的)种可能,所以利用dfs深搜,并融合回溯法,这一步搜不到的话既返回至上一步 ...

  6. hdu 1022 Train Problem I(栈)

    标记现在已经匹配到o1的第几列车了,o2从头开始,如果不匹配把o1就放入栈中,匹配后出栈并比较栈顶与o1的下一辆,匹配继续出,不匹配就继续进栈 1 #include <iostream> ...

  7. HDU 1022 Train Problem I stack 基础题

    题意: 有一个火车站,只有一个口同时用于进入和出去,但不能有2辆或以上同时进出. 给出一个n代表有n辆火车(n<=9),编号分别为1到n. 然后给出2个序列,分别代表火车进站的顺序,火车出站的顺 ...

  8. 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂

    文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...

  9. train problem I (栈水题)

    杭电1002http://acm.hdu.edu.cn/showproblem.php?pid=1022 Train Problem I Time Limit: 2000/1000 MS (Java/ ...

最新文章

  1. 收藏 | 机器学习最全知识点汇总(万字长文)
  2. RAC 实例不能启动 ORA-1589 signalled during ALTER DATABASE OPEN
  3. 阿里巴巴Druid数据源,史上最强的数据源,没有之一
  4. C++类静态成员与类静态成员函数
  5. java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)
  6. 前端学习(1439):vue的helloworld
  7. 11-散列1 电话聊天狂人
  8. React-Router 4 两个常用路由变量
  9. Bailian2735 八进制到十进制【入门】(POJ NOI0113-46)
  10. 【Sniffer】如何查看Sniffer截获的数据内容
  11. qt double 相减不为0_Qt线程同步单生产者多消费者
  12. redis的设计与实现
  13. 应用程序无法正常启动(0xc00007b)
  14. Lattice diamond软件中的Clarity Designer 与 IPexpress切换
  15. protoc java out_protoc 命令参数
  16. 解决python使用controlcan.dll接收报文每次只能处理一条报文信息问题
  17. 日常之卸载奇安信相关~
  18. 微信小程序开发笔记6——小程序添加并使用外部字体(亲测可用)
  19. ios 历年wwdc
  20. 第03章 Python的数据结构、函数和文件--Python for Data Analysis 2nd

热门文章

  1. spring-boot的access日志格式修改
  2. 《Cacti实战》——3.1 检索流程
  3. 本地实现ES6转ES5代码——gulpfile配置文件
  4. java 性能检测工具 检测死锁等
  5. 光纤通信及周边产品知识汇总
  6. 水晶报表设置FiledObject支持HTML格式的数据
  7. 8 基于管道的持久化存储 scrapy
  8. 华为9.0以上系统如何没root激活XPOSED框架的流程
  9. 如何用java完成Excel快速的导入导出
  10. Python 转义符