运用sort函数对结构体数组进行排序

博客记录了通过sort函数对结构体数组进行排序,解决寻找两个单词公共后缀的问题。虽然代码未能通过所有测试用例,但展示了利用节点位置和字母的比较策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据pat甲级1032记录下sort函数的应用,虽然代码没有AC,但是记录下学习过程。

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

whereAddress 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

这个题目是根据单词中单个字母的存储地址的先后连接关系,找出两个单词的公共储存后缀,没有按照题目一般解题想法,而是通过观察数据的规律性,发现如果从某个字母开始是公共后缀,那么那个字母必定是有两个字母共同指向她,即第三列数据有两个值是重复的,并且这个重复的数据在第一列必定有值匹配,不然那个被指向的字母就不存在,就没有公共后缀,但是有些情况还没有考虑完,所以代码通不过。

#include<algorithm>

#include<iostream>

using namespace std;

struct node

{

    int a;

    char b;

    int c;

};

int cmp(node re1, node re2)

{

    return re1.c < re2.c;

}

int main()

{

 

    int x, y, n,m=0,k=0;

    node w[500];

    cin >> x >> y >> n;

    for (int i = 0; i<n; i++)

        cin >> w[i].a >> w[i].b >> w[i].c;

    sort(w,w+n,cmp);

    for (int i = 0; i < n; i++)

    {

        if (w[i].c == w[i + 1].c)

        {

            x = w[i].c;

                m++;

        }

        else

            ;

    }

    for (y = 0; y<n; y++)

    {

        if (w[y].a == x)

            k = 1;

        else

            ;

    }

    if (m != 0 && k != 0)

        cout << x;

    else

        cout << -1;

return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值