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. ...
随机推荐
- Windows7 64位机上,OpenCV中配置CUDA,实现GPU操作步骤
原文地址:http://blog.csdn.net/haorenka2010/article/details/24385955 按语:首先感谢http://blog.csdn.net/fengbing ...
- 一起来搭简单的App框架
1.概述 最近在学车,抽着空写了一个常用的App框架,可惜不会制作gif图片,请忽略录屏软件的那个浮动窗口,要是有更好的方式制作gif麻烦告知下提前感谢,效果图如下,凑合着看下吧. 主要实现了 [1] ...
- Leetcode_116_Populating Next Right Pointers in Each Node
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43532817 Given a binary tree st ...
- 04_Nginx命令行参数,控制信号,Nginx启动、停止、重启命令
Nginx简单型,先关闭进程,修改你的配置后,重启进程. kill -QUIT `cat/usr/local/nginx/nginx.pid` ./nginx 2 重新加载配置文件,不重启进程, ...
- Otto事件总线框架的使用
Otto是一个在Android中的事件总线框架,它是square的一个开源框架,具体介绍点击这里,项目下载点击这里 为什么要使用Otto事件总线: 通常来说在Android中: 1.Activity与 ...
- Centos下grep命令简介
grep命令简介 grep 是一个最初用于Unix操作系统的命令行工具.在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本. grep ...
- 数据包接收系列 — NAPI的原理和实现
本文主要内容:简单分析NAPI的原理和实现. 内核版本:2.6.37 Author:zhangskd @ csdn 概述 NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就 ...
- java 调用JRuby
1.core package vanilla; import org.jruby.embed.ScriptingContainer; public class HelloWorld { private ...
- OpenCV——PS 图层混合算法 (四)
具体的算法原理可以参考 PS图层混合算法之四(亮光, 点光, 线性光, 实色混合) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define ...
- php引用传值详解
php的引用(就是在变量或者函数 .对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存 ...