首页 > 其他分享 >PAT乙级真题:1110 区块反转

PAT乙级真题:1110 区块反转

时间:2023-10-05 15:44:26浏览次数:30  
标签:PAT idx 真题 int next 1110 mp ans 区块

 

【1110 区块反转   分值:25  乙级】

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

题解:

1.和一般的链表类题目一样,录入数据后先初始化链表,使用一个数组v保存初始化后每个结点的地址

2.使用一个二维数组B[n/k+1][k],类似区块的意思,B[k]每次存放K个连续结点如B[0]=[4,5,6],B[1]=[1,2,3],将链表存到区块数组内

3.逆序访问B,将每个元素依次录入到一维数组ans。最后打印ans里的数据即可。

 1 void ex1110(){
 2     int start,n,k;
 3     cin >> start >> n >>k;
 4     int addr,data,next;
 5     map<int,int> mp_data,mp_next;
 6     vector<int> ans;
 7     for(int i=0;i<n;i++){
 8         cin >> addr >> data >> next;
 9         mp_data[addr] = data;
10         mp_next[addr] = next;
11     }
12     int v[n],t=start,idx = 0;   // idx:下标。while循环结束后idx就是表长=v.size()
13     while(t != -1){
14         v[idx ++] = t;      
15         t = mp_next[t];
16     }
17     int d = idx%k;
18     if(d>0){
19         for(int i=idx-d;i<idx;i++){     // 预处理数据,将队尾不满足k条数据的先加到ans里。ans[7,8]
20             ans.push_back(v[i]);
21         }
22         idx = idx-d;        // 然后修改链表长度
23     }
24     int B[n][k],cnt=0,b_idx=0;      // 将链表剩下的元素都加入到二维数组B中,B[n/k][k],B[[1,2,3],[4,5,6]]
25     for(int i=0;i<idx;i++){
26         B[b_idx][cnt++] = v[i];
27         if(cnt == k && i+1!=idx){
28             b_idx += 1;
29             cnt = 0;
30         }
31     }
32     for(int i=b_idx;i>=0;i--){          // 遍历B,将B中的元素都加到ans中
33         for(auto it:B[i]){              // 用it遍历二维数组B[i]里的每k个元素
34             ans.push_back(it);
35         }
36     }
37     for(int i=0;i<ans.size();i++){
38         printf("%05d %d ",ans[i],mp_data[ans[i]]);
39         if(i+1 == ans.size()){
40             printf("-1\n");
41         }else{printf("%05d\n",ans[i+1]);}
42     }
43 
44 }
45 
46 int main(){
47     ex1110();
48 
49 
50     return 0;
51 }

 

 

 

 

标签:PAT,idx,真题,int,next,1110,mp,ans,区块
From: https://www.cnblogs.com/jinziguang/p/17743436.html

相关文章

  • P9019 [USACO23JAN] Tractor Paths P 题解
    Description有\(n\)个区间,第\(i\)个区间为\([l_i,r_i]\)。保证\(l_1<l_2<\cdots<l_n\)且\(r_1<r_2<\cdots<r_n\)。其中一部分区间是特殊的,输入会给定。如果第\(i\)个区间和第\(j\)个区间相交,那么\(i,j\)之间有一条边。保证\(1,n\)联通。给定\(Q\)组询问,每次......
  • @PathVariable注解
    @PathVariable主要作用:映射URL绑定的占位符带占位符的URL是Spring3.0新增的功能,URL中的{xxx}占位符可以通过@PathVariable(“xxx”)绑定到操作方法的入参中。例如:@RequestMapping("/user/{id}")publicStringtestPathVariable(@PathVariable("id")Stringid){System.o......
  • Flutter/Dart第09天:Dart高级特殊Pattern模式的概览和用法
    Dart官方文档:https://dart.dev/language/patterns重要说明:本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。Pattern模式匹配的定义官网定义:PatternsareasyntacticcategoryintheDartlan......
  • 在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher)
    在不受支持的Mac上安装macOSSonoma、Ventura、Monterey、BigSur(OpenCoreLegacyPatcher)InstallmacOSonunsupportedMacs请访问原文链接:https://sysin.org/blog/install-macos-14-on-unsupported-mac/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgmacOS......
  • [pwn之路]patchelf之后,加载符号表!
    前言当你在进行二进制漏洞学习和利用时,经常需要使用调试工具来分析和理解程序的内部工作。在之前的交流中,我们提到了如何使用patchelf来修改二进制文件[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势,以适应调试的需求,但没有详细介绍如何加载符号表。实际上,对于学......
  • 什么是语义化版本里的 Major,Minor 和 Patch 版本号
    语义化版本(SemanticVersioning):Major、Minor和Patch版本号解析语义化版本,通常简称为SemVer,是一种软件版本号的标准化方案,旨在使软件版本号的管理更加透明和可预测。它主要由三个部分组成:Major(主版本号)、Minor(次版本号)和Patch(修订版本号)。在这篇文章中,我们将深入解释这三个部分......
  • 【知识杂谈#1】Linux如何安装net-tools和sbin配置PATH
    1.Linux下载net-tools在Linux上下载net-tools包的方法可能会因你所使用的Linux发行版而有所不同。在某些现代的Linux发行版中,net-tools已经被弃用,而推荐使用iproute2来替代它。#对于Debian/Ubuntu系统:sudoaptinstallnet-tools#对于CentOS/RHEL系统:sudoyuminstallnet-tools#......
  • 【愚公系列】2023年10月 二十三种设计模式(一)-工厂方法模式(Factory Method Pattern)
    ......
  • Java 21 新特性:Unnamed Patterns and Variables
    Java21中除了推出JEP445:UnnamedClassesandInstanceMainMethods之外,还有另外一个预览功能:未命名模式和变量(UnnamedPatternsandVariables)。该新特性的目的是提高代码的可读性和可维护性。下面通过一个例子来理解这个功能,try-catch块相信大家都不陌生,都是这样写的:try{......
  • 【知识杂谈#1】Linux如何安装net-tools和sbin配置PATH
    1.Linux下载net-tools在Linux上下载net-tools包的方法可能会因你所使用的Linux发行版而有所不同。在某些现代的Linux发行版中,net-tools已经被弃用,而推荐使用iproute2来替代它。#对于Debian/Ubuntu系统:sudoaptinstallnet-tools#对于CentOS/RHEL系统:sudoyuminstallnet......