PAT1032: Sharing (25)
1032. Sharing (25)
To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, "loading" and "being" are stored as showed in Figure 1.
Figure 1
You are supposed to find the starting position of the common suffix (e.g. the position of "i" in Figure 1).
Input Specification:
Each input file contains one test case. For each case, the first line contains two addresses of nodes and a positive N (<= 105), where the two addresses are the addresses of the first nodes of the two words, and N is the total number of nodes. The address of a node is a 5-digit positive integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where Address is the position of the node, Data is the letter contained by this node which is an English letter chosen from {a-z, A-Z}, and Nextis the position of the next node.
Output Specification:
For each case, simply output the 5-digit starting position of the common suffix. If the two words have no common suffix, output "-1" instead.
Sample Input 1:
- 11111 22222 9
- 67890 i 00002
- 00010 a 12345
- 00003 g -1
- 12345 D 67890
- 00002 n 00003
- 22222 B 23456
- 11111 L 00001
- 23456 e 67890
- 00001 o 00010
Sample Output 1:
- 67890
Sample Input 2:
- 00001 00002 4
- 00001 a 10001
- 10001 s -1
- 00002 a 10002
- 10002 t -1
Sample Output 2:
- -1
- 思路
- 求两个单词共同后缀开始的位置,标记单词一使用的字母,遍历单词2字母时遇到相同且标记过的字母就是该共同后缀开始的位置。
- 注:用map或者unorder_map最后一个用例总是超时,而用单纯的数组就能通过,估计map在大量数据情况下插入时间复杂度不好?
- 代码
最后一个用例超时
- #include<iostream>
- #include<unordered_map>
- #include<string>
- using namespace std;
- class Node
- {
- public:
- string address;
- char data;
- string next;
- bool isVisit = false;
- };
- int main()
- {
- string f,s;
- int N;
- while(cin >> f >> s >> N)
- {
- unordered_map<string,Node> nodes;
- for(int i = ;i < N;i++)
- {
- Node tmp;
- cin >> tmp.address >> tmp.data >> tmp.next;
- nodes.insert(pair<string,Node>(tmp.address,tmp));
- }
- while(f != "-1")
- {
- nodes[f].isVisit = true;
- f = nodes[f].next;
- }
- while(s != "-1" && !nodes[s].isVisit)
- {
- s = nodes[s].next;
- }
- if(nodes[s].isVisit)
- cout << s << endl;
- else
- cout << "-1" << endl;
- }
- }
AC的代码
- #include <cstdio>
- #include <cstring>
- using namespace std;
- int node[],temp[];
- int main()
- {
- memset(node,-,sizeof(node));
- int start1,start2,n,from,to;
- char s[];
- scanf("%d %d %d",&start1,&start2,&n);
- for( int i=; i<n; i++)
- {
- scanf("%d %s %d",&from,s,&to);
- node[from] = to;
- }
- while(start1 != -)
- {
- temp[start1] = ;
- start1 = node[start1];
- }
- while(start2 != -)
- {
- if(temp[start2])
- {
- printf("%05d\n",start2);
- return ;
- }
- start2 = node[start2];
- }
- printf("-1\n");
- return ;
- }
PAT1032: Sharing (25)的更多相关文章
- 【PAT】1032 Sharing (25)(25 分)
1032 Sharing (25)(25 分) To store English words, one method is to use linked lists and store a word l ...
- PAT甲 1032. Sharing (25) 2016-09-09 23:13 27人阅读 评论(0) 收藏
1032. Sharing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To store Engl ...
- PAT 甲级 1032 Sharing (25 分)(结构体模拟链表,结构体的赋值是深拷贝)
1032 Sharing (25 分) To store English words, one method is to use linked lists and store a word let ...
- 1032 Sharing (25分)
1032 Sharing (25分) 题目 思路 定义map存储所有的<地址1,地址2> 第一set存放单词1的所有地址(通过查找map) 通过单词二的首地址,结合map,然后在set中查 ...
- 1032. Sharing (25) -set运用
题目如下: To store English words, one method is to use linked lists and store a word letter by letter. T ...
- 1032. Sharing (25)
To store English words, one method is to use linked lists and store a word letter by letter. To save ...
- PAT甲题题解-1032. Sharing (25)-链表水题
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- 1032 Sharing (25)(25 point(s))
problem To store English words, one method is to use linked lists and store a word letter by letter. ...
- PAT 1003 Sharing (25)
题目描写叙述 To store English words, one method is to use linked lists and store a word letter by letter. ...
随机推荐
- 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示
去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...
- Bootstrap 简介: 创建响应式、移动项目的工具
原文链接: Introduction to Bootstrap: A Tool for Building Responsive, Mobile-First Projects 下载: 示例代码Boots ...
- STL算法设计理念 - 二元函数,二元谓词以及在set中的应用
demo 二元函数对象 #include <iostream> #include <cstdio> #include <vector> #include <a ...
- HTTPSQS 队列
http://blog.csdn.net/21aspnet/article/details/7467812 http://hi.baidu.com/caoxin_rain/item/5282770cd ...
- zTree的调用设使用(跨两个系统,两类技术实现的项目案例SpringMVC+Spring+MyBatis和Struts2+Spring+ibatis框架组合)
1.从zTree官网上下载zTree的包,zTree的官方网址是:http://www.ztree.me/v3/main.php#_zTreeInfo 2.引入zTree所需的依赖,例如(jQuery ...
- Unity Socket UDP
using System.Collections; using System.Collections.Generic; using System.Net.Sockets; using System.N ...
- LeetCode(56)-Add Binary
题目: Given two binary strings, return their sum (also a binary string). For example, a = "11&quo ...
- async & await 异步编程的一点巧方法
await 关键字不会创建新的线程,而是由Task任务或是FCL中的xxxAsync等方法创建的线程,而且这里创建的线程都是基于线程池创建的工作线程,属于后台线程. await关键字会阻塞/暂停调用它 ...
- html5中新增的非主体结构的元素
html5中出了新增了article.section.nav.aside.time主要结构元素外,还增加了一些表示逻辑结构或附加信息的非主体结构元素. 一.header元素 header元素是一种具有 ...
- java虚拟机的类加载机制
引言 我们写的代码是放在.java文件中,经过编译器编译后,转成.class文件.Class文件是一串二进制流,它可以被各平台的虚拟机所接受,实现跨平台. 虚拟机将描述类的数据从class文 ...