1032 Sharing (25)(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 (<= 10^5^), 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 Next is 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

//这个代码可以在牛客网上AC,但是在pat上有最后两个测试点通不过,只得了20分,问题在哪里呢?

#include <iostream>
#include <vector>
#include<stdio.h>
#include <algorithm>
using namespace std;
int node[]; int main()
{
int f,t,no;
int addr,next,outs;
char ch;
bool flag=false;
while(scanf("%d%d%d",&f,&t,&no)!=-)
{
for(int i=; i<no; i++)
{
scanf("%d %c %d",&addr,&ch,&next);
if(next!=-)
{
if(node[next]==)
node[next]=;
else
{
outs=next;
flag=true;
}
}
}
if(!flag)
printf("-1\n");
else{
printf("%5d\n",outs);
flag=false;
}
} return ;
}

//这个我甚至都没存储什么信息,因为一个节点如果在next的位置出现了2次,那么肯定就是那个公共的呀,还有什么异议吗?这可能就是我在pat上通不过的原因,找一下。

#include <iostream>
#include <vector>
#include<stdio.h>
#include <algorithm>
using namespace std;
int node[]; int main()
{
int f,t,no;
int addr,next,outs=-;
char ch;
bool flag=false;
while(scanf("%d%d%d",&f,&t,&no)!=-){
node[f]=;
node[t]=;
for(int i=; i<no; i++)
{
scanf("%d %c %d",&addr,&ch,&next);
if(next!=-)
{
if(node[next]==)
node[next]=;
else if(outs==-)
{
outs=next;
flag=true;
}
}
}
if(f==t){
printf("%05d",f);continue;//这个是针对测试点4,
//当起始地址一样时。
}
if(!flag)
printf("-1");
else{
printf("%05d",outs);
outs=-;
flag=false;
}
}
return ;
}

//应该是不行了,如果用只存next来做,没找到为什么测试点2和测试点5过不去,好绝望。先就这样吧。(有一个博客里是说,如果只判断next就不能判断出干扰点,而我想不出来干扰点是什么。)

大佬们的代码都是hash+模拟链表,先都把所有的点读入, 在第一条链表中出现的进行标记,第二条中出现的如果在第一条中已经出现了,那么就是这个点,

代码来自:https://www.liuchuo.net/archives/2113

#include <cstdio>
using namespace std;
struct NODE {
char key;
int next;
bool flag;
}node[];
int main() {
int s1, s2, n, a, b;
scanf("%d%d%d", &s1, &s2, &n);
char data;
for(int i = ; i < n; i++) {
scanf("%d %c %d", &a, &data, &b);
node[a] = {data, b, false};//结构体居然可以这么初始化。
}
for(int i = s1; i != -; i = node[i].next)
node[i].flag = true;//这样就可以模拟单链表的遍历
for(int i = s2; i != -; i = node[i].next) {
if(node[i].flag == true) {
printf("%05d", i);
return ;
}
}
printf("-1");
return ;
}

PAT 1032 Sharing[hash][链表][一般上]的更多相关文章

  1. PAT甲题题解-1032. Sharing (25)-链表水题

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  2. PAT Advanced 1032 Sharing(25) [链表]

    题目 To store English words, one method is to use linked lists and store a word letter by letter. To s ...

  3. PAT 1032. Sharing

    其实就是链表求交: #include <iostream> #include <cstdio> #include <cstdlib> #include <un ...

  4. PAT 1032 Sharing (25分) 从自信到自闭

    题目 To store English words, one method is to use linked lists and store a word letter by letter. To s ...

  5. PAT 甲级 1032 Sharing (25 分)(结构体模拟链表,结构体的赋值是深拷贝)

    1032 Sharing (25 分)   To store English words, one method is to use linked lists and store a word let ...

  6. 【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 ...

  7. 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 ...

  8. Hash 哈希(上)

    Hash 哈希(上) 目录 Hash 哈希(上) 简介 Hash函数的构造 取余法 乘积取整法 其他方法 冲突的处理 挂链法 开放定址法 线性探查法 二次探查法 双哈希法 结语 简介 Hash,又称散 ...

  9. 1032 Sharing (25分)

    1032 Sharing (25分) 题目 思路 定义map存储所有的<地址1,地址2> 第一set存放单词1的所有地址(通过查找map) 通过单词二的首地址,结合map,然后在set中查 ...

随机推荐

  1. SqlServer 连接远程服务器数据库 实现跨服务器联合查询

    第一种: exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'IT ...

  2. 解决neo4j @Transactional 与Spring data jpa @Transactional 冲突问题,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate,以及解决@Version失效问题

    之前mybatis特别流行,所以前几个项目都是用@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider 加反射泛型封装了一些通用 ...

  3. KMP算法的实现(Java语言描述)

    标签:it KMP算法是模式匹配专用算法. 它是在已知模式串的next或nextval数组的基础上执行的.如果不知道它们二者之一,就没法使用KMP算法,因此我们需要计算它们. KMP算法由两部分组成: ...

  4. Android 本地tomcat服务器接收处理手机上传的数据之环境搭建

    上一篇:Android 使用tomcat搭建HTTP文件下载服务器   本篇文章   环境:win7 + jdk1.7 + tomcat v8.0.53   工具: 1.Eclipse  Eclips ...

  5. BZOJ3163&Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]

    3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 277[Submit][ ...

  6. 熟悉使用ConfigParser库读写配置文件

    Python的配置文件 配置文件 setting.ini文件是一个纯文本 [DataBase1] username = admin passwors = root [DataBase2] hostna ...

  7. 修改nose_html_reporting,解决输出带中文时,不能生成html文件

    在使用nose_html_reporting时,如果测试输出中带有中文,那么html输出会失败,提示如下: 提示'ascii'编码码失败 这是因为在string.IO中取回来的数据与当前脚本中声明的编 ...

  8. Docker学习计划三:Dockerfile 使用

    我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键,Dockerfile 可以非常容易的定义镜像内容 首先通过一张图来了解 Docker 镜像 ...

  9. Linux shell一行流编程实践

    Linux下很多命令用起来真相当方便,尤其是进行批处理操作时.(话说感觉这种程序也不复杂,windows咋一直不搞一个好用的shell呢) 这里列出一些实际shell操作的应用场景,具体命令的用法与解 ...

  10. VMware虚拟机安装Ubuntu系统英文改中文的方法

    首先点击右上角的这个桌面 1,Change Desktop Background   图片发自简书App 2.到系统设置(System Settings)--- 点击Language Support ...