首页 > 其他分享 >PAT Basic 1110. 区块反转

PAT Basic 1110. 区块反转

时间:2023-04-18 20:44:33浏览次数:35  
标签:Node 结点 PAT int 链表 1110 地址 Basic 区块

PAT Basic 1110. 区块反转

1. 题目描述:

给定一个单链表 \(L\),我们将每 \(K\) 个结点看成一个区块(链表最后若不足 \(K\) 个结点,也看成一个区块),请编写程序将 \(L\) 中所有区块的链接反转。例如:给定 \(L\) 为 \(1→2→3→4→5→6→7→8\),\(K\) 为 3,则输出应该为 \(7→8→4→5→6→1→2→3\)。

2. 输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 \(N\) (\(≤10^5\))、以及正整数 \(K\) (\(≤N\)),即区块的大小。结点的地址是 5 位非负整数,NULL 地址用 \(−1\) 表示。

接下来有 \(N\) 行,每行格式为:

Address Data Next

其中 Address 是结点地址,Data 是该结点保存的整数数据,Next 是下一结点的地址。

3. 输出格式:

对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

4. 输入样例:

00100 8 3
71120 7 88666
00000 4 99999
00100 1 12309
68237 6 71120
33218 3 00000
99999 5 68237
88666 8 -1
12309 2 33218

5. 输出样例:

71120 7 88666
88666 8 00000
00000 4 99999
99999 5 68237
68237 6 00100
00100 1 12309
12309 2 33218
33218 3 -1

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

回血题,定义结构体Node存储结点相关信息,因为结点地址为5位非负整数,所以地址属于闭区间\([00000,99999]\),根据地址个数定义结构体数组allNode存储所有结点信息,list存储原始链表,res存储结果链表。先根据头结点地址构造出原始链表,然后根据题意构造结果链表并输出即可,构造结果链表要根据原始链表结点个数能否被 \(K\) 整除分情况进行处理。这类题目的套路都是将链表进行顺序存储,方便进行随机访问,已经做麻了。。。

My Code:

#include <stdio.h>

#define MAX_ADDRESS 100000

typedef struct node
{
    int address;
    int data;
    int next;
} Node;

int main(void)
{
    int pHead=0, nodeCount=0, k=0;
    Node allNode[MAX_ADDRESS];
    Node list[MAX_ADDRESS];
    int activeCount=0;
    Node res[MAX_ADDRESS];
    int i=0, j=0; // iterator
    int tempAdr=0, tempData=0, tempNext=0;
    int pNode=0; // pointer of Node
    int groupNum = 0;
    int resCount=0;
    
    scanf("%d%d%d", &pHead, &nodeCount, &k);
    for(i=0; i<nodeCount; ++i)
    {
        scanf("%d%d%d", &tempAdr, &tempData, &tempNext);
        allNode[tempAdr].address = tempAdr;
        allNode[tempAdr].data = tempData;
        allNode[tempAdr].next = tempNext;
    }
    
    pNode = pHead; // construct original linklist
    while(pNode != -1)
    {
        list[activeCount++] = allNode[pNode];
        pNode = allNode[pNode].next;
    }
    
    groupNum = activeCount/k;
    
    resCount=0; // res index
    if(activeCount % k) // have remain node
    {
        for(i=k*groupNum; i<activeCount; ++i)
        {
            res[resCount++]=list[i];
        }
        
        for(i=(groupNum-1)*k; i>=0; i-=k)
        {
            for(j=0; j<k; ++j)
            {
                res[resCount++] = list[i+j];
            }
        }
    }
    else // doesn't have remain node
    {
        for(i=(groupNum-1)*k; i>=0; i-=k)
        {
            for(j=0; j<k; ++j)
            {
                res[resCount++] = list[i+j];
            }
        }
    }
    
    for(i=0; i<resCount-1; ++i)
    {
        printf("%05d %d %05d\n", res[i].address, res[i].data, res[i+1].address);
    }
    printf("%05d %d -1\n", res[i].address, res[i].data);
    
//     for(i=0; i<activeCount; ++i) // output original list
//     {
//         printf("%d %d %d\n", list[i].address, list[i].data, list[i].next);
//     }
    
    return 0;
}

标签:Node,结点,PAT,int,链表,1110,地址,Basic,区块
From: https://www.cnblogs.com/tacticKing/p/17331022.html

相关文章

  • PAT Basic 1109. 擅长C
    PATBasic1109.擅长C1.题目描述:当你被面试官要求用C写一个“HelloWorld”时,有本事像下图显示的那样写一个出来吗?2.输入格式:输入首先给出26个英文大写字母A-Z,每个字母用一个\(7×5\)的、由C和.组成的矩阵构成。最后在一行中给出一个句子,以回车结束。句子是由......
  • maven的pom文件中<relativePath/>的作用
    在<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/><!--lookupparentfromrepository-->&l......
  • 16 Ray Tracing (Monte Carlo Path Tracing)
    关键点MonteCarloIntegrationDistributedRayTracingPathTracingRussianRoulette(RR)SamplingtheLight(puremath)1.MonteCarloIntegration蒙特卡洛积分对于没有解析式的对象,可以使用该方法求其定积分。在积分范围内随机采样一个值,作为高,使用区间长度作为宽,......
  • Plugin ‘Android WiFi ADB’ is compatible with IntelliJ IDEA only because it doe
    Plugin‘AndroidWiFiADB’iscompatiblewithIntelliJIDEAonlybecauseitdoesn’tdefineanyexplicitmoduledependenciesAndroidStudio中安装AndroidWiFiADB插件重启时报错怎么解决Plugin‘AndroidWiFiADB’iscompatiblewithIntelliJIDEAonlyb......
  • Unable to create an object of type 'NetcoremvcDbcontext'. For the different patt
    问题描述:我整个项目重新生成没有报错,但是用efcore迁移数据库命令:Add-Migrationinit就生成不了文件夹Migrations,并且报错:Unabletocreateanobjectoftype'NetcoremvcDbcontext'.Forthedifferentpatternssupportedatdesigntime,seehttps://go.microsoft.com/fwlink/......
  • PAT Basic 1107. 老鼠爱大米
    PATBasic1107.老鼠爱大米1.题目描述:翁恺老师曾经设计过一款Java挑战游戏,叫“老鼠爱大米”(或许因为他的外号叫“胖胖鼠”)。每个玩家用Java代码控制一只鼠,目标是抢吃尽可能多的大米让自己变成胖胖鼠,最胖的那只就是冠军。因为游戏时间不能太长,我们把玩家分成\(N\)组,每组......
  • selenium登录cnblogs、抽屉半自动点赞、xpath的使用、打码平台使用、scrapy介绍
    昨日回顾#1beautifulsoup4使用-xml解析库,用它来解析爬回来的html内容,从中找出我们需要的内容#2遍历文档树-.的使用soup.html.body.p.a-获取属性对象.attrs.get('href')-获取文本对象.textstringstrings-子节点,父节点,兄......
  • 菜鸟记录:c语言实现PAT甲级1004--Counting Leaves
    好消息:与上题的Emergency是同样的方法。坏消息:又错了&&c++真的比c方便太多太多。Afamilyhierarchyisusuallypresentedbyapedigreetree.Yourjobistocountthosefamilymemberswhohavenochild.InputSpecification:Eachinputfilecontainsonetest......
  • 关于软件测试领域的 Happy Path
    在软件测试领域,happypath是指一组测试用例,其中每个测试用例都覆盖了一个顺畅运行的路径,即一组不需要任何异常处理的输入和操作,以及相应的预期输出和结果。通常,这些测试用例被设计为模拟最常见、最基本和最常用的用户行为和用例场景,以确保软件在正常操作条件下可以正确地运行和处......
  • PAT Basic 1102. 教超冠军卷
    PATBasic1102.教超冠军卷1.题目描述:“教育超市”是拼题A系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息找出教育超市所有试卷中的销量(即购买人次)冠军和销售额冠军。2.输......