首页 > 其他分享 >PAT Advanced 1032 Sharing(25)

PAT Advanced 1032 Sharing(25)

时间:2022-09-06 21:02:32浏览次数:89  
标签:node 25 Sharing no next 链表 v1 1032 position

题目描述:

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.

image

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

算法描述:链表 结构体

题目大意:

求两个链表的首个共同结点的地址。如果没有,就输出-1

#include<iostream>
#include<vector>
using namespace std;

struct node{ // 静态链表  不需要指针
    char data;
    int next;
};
node no[100010];

int main()
{
    int h1, h2, n, addr, i, j;
    cin >> h1 >> h2 >> n;
    
    while(n --)
    {
        cin >> addr;
        cin >> no[addr].data >> no[addr].next;
    }
    
    vector<int> v1, v2;
    for(i = h1 ; i != -1 ; i = no[i].next)
        v1.push_back(i);

    for(i = h2 ; i != -1 ; i = no[i].next)
        v2.push_back(i);
    // 从后往前遍历两链表,直至两链表元素不同
    for(i = v1.size() - 1, j = v2.size() - 1 ; i >= 0 && j >= 0 && v1[i] == v2[j] ; i --, j --);
    // 没有共同后缀
    if(i == v1.size() - 1)    cout << -1;
    else    printf("%05d", v1[i + 1]);
    return 0;
}

标签:node,25,Sharing,no,next,链表,v1,1032,position
From: https://www.cnblogs.com/yztozju/p/16663284.html

相关文章

  • 2022-9-6 #25 None
    这是否也算一种闲话。受到音游的影响,最近一个月都没咋做题,也没更博。我的评价是......
  • CF1325F Ehab's Last Theorem
    传送门思路dfs树的一道出色的应用题令\(k=\lceil\sqrtn\rceil\)我们先按照遍历的顺序构建出dfs树对于一条返祖边\((u,v)\),如果有\(dep_u-dep_v+1\gek\),......
  • 题解【CF1025D Recovering BST】
    题目传送门肉眼观察题。设\(f_{i,j,k}\)表示区间\([i,j]\)的根为\(k\)时能否还原。这样枚举一个根\(k\),分别枚举两个儿子在两个区间的位置转移就好了,由于两个儿子......
  • git解决The authenticity of host ‘github.com (192.30.255.112)‘ can‘t be establ
    git解决Theauthenticityofhost‘github.com(192.30.255.112)‘can‘tbeestablished问题报错完整信息Theauthenticityofhost'github.com(20.205.243.166)'c......
  • 25.强调句
    一、强调句的常用句型(一)陈述句的强调句型Itis/was+被强调部分(通常是主语、宾语或状语)+that/who(当强调主语且主语指人)+其他部分。例:Itwasyesterdaythatheme......
  • SI3933/GC3933/PAN3501/AS179 125K低频唤醒芯片同类型芯片的优势对比
    关于125K低频唤醒芯片,现在市面上有太多太多,像PAN3501、GC3933还有SI3933,都是替换SKYWORKS的AS179-92,同类型芯片的优势在哪里呢?今天小编挑一款给大家浅浅分享一下SI3933:3D......
  • 25 | JAVA集合Map(实际为接口)
    使用MapMap这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)。Map也是一个接口,最常用的实现类是HashMap。containsKey(Kkey)方法put()ge......
  • 25 匹马 5 条赛道,最快需要几轮求出前 3 名?
    请点赞关注,你的支持对我意义重大。......
  • Typora多线程批量上传图片,永久免费25G图床
    为了满足日常需求,就写了一个自动上传图片到图床的脚本运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显。以Win......
  • AtCoder ABC 259 F Select Edges
    题意:​ 给出一棵树,边带权,对于点i,最多保留d[i]条边,可以被分成连通块,请问边权和最大是多少分析:​ 因为可以被分成连通块,我们就可以对点i划分两种状态。第一种是点i不与父......