题目描写叙述

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

输入描写叙述:

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 Next is the position of the next node.

输出描写叙述:

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.

输入样例:

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

输出样例:

67890
//最初的解法低效。且有未知错误
/*思路例如以下:
从最后面開始找。直到存在某个前驱有不止一个后继指向它,则结束*/
#include <iostream>
#include <iomanip> using namespace std; typedef struct Node
{
int addressPre,addressPost;
char data;
}; int main()
{
int a1,a2,N,i,j,k,ans;
while(cin>>a1>>a2>>N)
{
Node *node=new Node[N];
for(i=0;i<N;i++)
cin>>node[i].addressPre>>node[i].data>>node[i].addressPost;
/* for(i=0;i<N;i++)
cout<<node[i].addressPre<<" "<<node[i].data<<" "<<node[i].addressPost<<endl;
*/ k=-1;
while(1)
{
ans=0;
for(i=0;i<N;i++)
{
if(k==node[i].addressPost)
{
ans++;
j=i;
}
}
if(ans>1)
break;
else
k=node[j].addressPre;
}
cout <<setfill('0')<< setw(5)<<k<<endl;
}
return 0;
}

正解

#include <iostream>
#include <iomanip>
#include <vector> using namespace std; typedef struct Node
{
int addressPre,addressPost;
char data;
}; vector<Node> list1;
vector<Node> list2; Node node[100010]; int main()
{
int a1,a2,N,i,j,k;
int l1,l2;
Node tNode;
while(cin>>a1>>a2>>N)
{
for(i=0;i<N;i++)
{
cin>>tNode.addressPre>>tNode.data>>tNode.addressPost;
node[tNode.addressPre]=tNode;
}
l1=a1;
l2=a2;
while(l1!=-1)
{
list1.push_back(node[l1]);
l1=node[l1].addressPost;
}
while(l2!=-1)
{
list2.push_back(node[l2]);
l2=node[l2].addressPost;
}
for(i=0,k=0;i<list1.size();i++)
{
for(j=0;j<list2.size();j++)
{
if(list1[i].addressPre==list2[j].addressPre)
{
k=1;
break;
}
}
if(k)
break;
}
if(k)
cout <<setfill('0')<< setw(5)<<list1[i].addressPre<<endl;
else
cout<<-1<<endl; }
return 0;
}

PAT 1003 Sharing (25)的更多相关文章

  1. PAT 1003. Emergency (25)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  2. PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  3. PAT 1003 Emergency (25分)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  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 解题报告 1003. Emergency (25)

    1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...

  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. PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  9. PAT 甲级 1003. Emergency (25)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

随机推荐

  1. docker:安装mysql

    文章来源:https://www.cnblogs.com/hello-tl/p/9234429.html 1.添加镜像 docker pull mysql 2.在/data下新建文件夹mysql,进入 ...

  2. Ajax四步操作

    第一步得到(XMLHttpRequest)function creatXMLHttpRequest(){ try{ return new XMLHttpRequest(); } catch(e){ t ...

  3. Spark MLlib + maven + scala 试水~

    使用SGD算法逻辑回归的垃圾邮件分类器 package com.oreilly.learningsparkexamples.scala import org.apache.spark.{SparkCo ...

  4. Java技术——Java中的内存泄漏

    . OOM的常见类型 按照JVM规范,JAVA虚拟机在运行时会管理以下的内存区域: 程序计数器:当前线程执行的字节码的行号指示器,线程私有. JAVA虚拟机栈:Java方法执行的内存模型,每个Java ...

  5. 关于Linux下安装Oracle时报错:out of memory的问题分析说明

    一.说明 在Oracle安装过程中,可能遇到out of memory这种错误,这是由于系统内存不足导致!我们可以通过加内存的方式解决! 而如果是另一种情况呢: 例如我在主机上装了两个Oracle服务 ...

  6. 逻辑回归(Logistic Regression)算法小结

    一.逻辑回归简述: 回顾线性回归算法,对于给定的一些n维特征(x1,x2,x3,......xn),我们想通过对这些特征进行加权求和汇总的方法来描绘出事物的最终运算结果.从而衍生出我们线性回归的计算公 ...

  7. [android开发篇]自定义权限

    有时候,我们可能遇到如下需求场景:当用户在一个应用程序中进行某项操作时,会启动另外一个应用程序,最常见的时直接打开了另外一个应用程序,并进入其中某个Activity(如:有的应用中有推荐应用列表,当用 ...

  8. spring配置druid连接池和监控数据库访问性能

    Druid连接池及监控在spring配置如下: <bean id="dataSource" class="com.alibaba.druid.pool.DruidD ...

  9. LogMiner配置使用手册

    LogMiner配置使用手册 1 Logminer简介 1.1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻 ...

  10. iOS学习笔记21-推送证书与秘钥申请

    ---恢复内容开始--- 一.iOS证书 iOS常用的证书包括开发证书和发布证书,无论是真机调试还是最终发布应用到App Store这两个证书都是必须的,它是iOS开发的基本证书.Xcode7以后真机 ...