首页 > 其他分享 >[THUPC2022 初赛] 造计算机

[THUPC2022 初赛] 造计算机

时间:2023-08-18 17:01:16浏览次数:52  
标签:元素 计算机 int 位置 交换 初赛 与值 寄存器 THUPC2022

题目传送门

更好的阅读体验

思路

结论:如果序列原先就合法,答案为 \(0\);否则,最多使用两个寄存器。

我们对 \(i \rightarrow a_i\) 建边得到若干个环,我们单独考虑一个环如何操作。

对于一个长度为 \(4\) 的数列,再包含两个寄存器,设两个寄存器的值分别为 \(x,y\)。

显然 \(4,1,3\) 组成了一个环,我们对其进行一些操作,使得他们回到他们想要到达的位置,即箭头指向的位置。

我们记 \(\operatorname{pos}_i\) 表示值 \(i\) 所在的位置,把 \(4\) 看作环的起点,那么把这个环拆成一条链就是 \(4,3,1\),下文称之为链。

首先我们将值 \(4\) 与值 \(5\) 交换位置,在此基础上再将值 \(3\) 与刚刚换到第五个位置的值 \(4\) 交换位置,除了链的最后一个元素外,剩下的元素按照上面的方式依次与第一个寄存器进行交换。

这样,我们链的第 \(1 \sim n-2\) 个元素都达到了自己的目标位置(他们指向的位置就是目标位置)。只剩下原本链的最后一个元素和倒数第二个元素没有达到目标位置。

我们寄存器原本的值 \(x\) 放在了链的第一个位置,链的倒数第二个元素放在了第一个寄存器的位置。链的最后一个元素仍在其原位置。

考虑如何处理剩下这两个元素。我们设链的倒数第二个值为 \(a\),最后一个值为 \(b\)。

我们考虑把值 \(b\) 与值 \(y\) 交换,现在 \(y\) 在链的末尾,\(b\) 在第二个寄存器;

再考虑把刚刚换到链的末尾的值 \(y\) 与第一个寄存器的值进行交换,即将值 \(y\) 与值 \(a\) 交换,现在 \(a\) 在链的末尾(达到了目标位置),\(y\) 在第一个寄存器;

再考虑将第二个寄存器的值与链首的值进行交换,即把 \(b\) 与 \(x\) 进行交换,\(b\) 达到了其目标位置。

到这里,前面的内存单元就已经合法了。我们再考虑一下两个寄存器顺序是否合法就可以了。

Code

#include <bits/stdc++.h>

using namespace std;

const int N = 100500;

int n,m;

int a[N];

vector< pair<int,int> > ans;
deque<int> st;

bool vis[N];

void dfs(int x) {
    vis[x] = 1;
    st.push_back(x);

    if(!vis[a[x]])
        dfs(a[x]);
    
    return ;
}


int main() {
    ios::sync_with_stdio(false);
    cin >> n;
    for(int i = 1;i <= n; i++) 
        cin >> a[i];
    
    a[n + 1] = n + 1;
    a[n + 2] = n + 2;
    
    for(int i = 1;i <= n; i++) {
        if(!vis[i] && i != a[i]) {
            st.clear();
            
            dfs(i);

            m = 2;

            for(auto const &it : st) {
                if(it == st.back())
                    break;

                ans.emplace_back(it,n + 1);
                swap(a[it],a[n + 1]);
            }
            
            ans.emplace_back(st.back(),n + 2);
            swap(a[st.back()],a[n + 2]);

            ans.emplace_back(st.back(),n + 1);
            swap(a[st.back()],a[n + 1]);

            ans.emplace_back(st.front(),n + 2);
            swap(a[st.front()],a[n + 2]);
        }
    }

    if(a[n + 1] != n + 1) 
        ans.emplace_back(n + 1,n + 2);
    
    cout << m << " " << ans.size() << "\n";
    for(auto const &it : ans) 
        cout << it.first << " " << it.second << "\n";
    
    return 0;
}

标签:元素,计算机,int,位置,交换,初赛,与值,寄存器,THUPC2022
From: https://www.cnblogs.com/baijian0212/p/p8210.html

相关文章

  • 计算机英语词汇
    计算机英语词汇CPU(Center  Processor  Unit)中央处理单元  mainboard主板  RAM(random  access  memory)随机存储器(内存)  ROM(Read  Only  Memory)只读存储器  Floppy  Disk软盘  Hard  Disk硬盘  CD-ROM光盘驱动器(光驱)  moni......
  • 计算机视觉(Computer Vision),计算机图形学(Computer Graphics)和数字图像(Image Proce
    计算机视觉(ComputerVision),计算机图形学(ComputerGraphics)和数字图像(ImageProcessing)从学科分类:ComputerScience/ArtificialIntelligence/ComputerVisionComputerScience/ComputerGraphicsandVisualizationElectricalEngineering/SignalProcessing/Digit......
  • 计算机程序员 考 试 级 别 及 其 编 码
     考试级别及其编码  领域计算机软件计算机网络计算机应用技术信息系统信息服务高级资格信息系统项目管理师01系统分析师02系统架构设计师03网络规划设计师04系统规划与管理师05中级资格软件评测师14软件设计师1......
  • 心理学与计算机科学 人脑与电脑
       心理学与计算机科学的渊源颇深,两者之间相互启发促进由来已久。概因人脑与电脑,一碳一硅,本身就有很高的可比性。人工智能学科的奠基人之一,赫伯特·西蒙(HerbertSimon,又译司马贺)既是一位心理学家也是一位计算机科学家,并获1975年图灵奖、1978年诺贝尔经济学奖以及美国心理学......
  • 计算机学科(百度百科)
     CCF计算机体系结构/并行与分布计算/存储系统计算机网络网络与信息安全软件工程/系统软件/程序设计语言数据库/数据挖掘/内容检索计算机科学理论计算机图形学与多媒体人工智能人机交互与普适计算交叉/综合/新兴  计算机学科的特色主要体现在:理......
  • 基于微信小程序的网上交易平台的设计与实现-计算机毕业设计源码+LW文档
    摘 要随着互联网技术的发展,传统的商品销售迎来了机遇,我国是个人口大国,商品的需求量大,如何推广商品的销售是企业非常关注的事情。随着电子商务多元化的发展,各种类型的商品逐渐转移到线上销售。在互联网的帮助下,带动企业打开销路,促进商品销售的可持续发展。同时,通过基于微信小程......
  • 会议记录管理系统-计算机毕业设计源码+LW文档
    摘 要随着信息技术的发展,管理系统越来越成熟,各种企事业单位使用各种类型的管理系统来提高工作效率,从而降低手工劳动的弊端。公司一直以来都非常重视公司信息化的发展,近几年来随着公司规模扩大,业务逐渐增加,公司对会员的管理也愈发的困难。因此,公司提出通过开发会议记录管理系统......
  • 基于PHP的花茶交流平台的设计与实现-计算机毕业设计源码+LW文档
    摘  要现在这种紧张压抑的生活状态,人们已经渐渐忘记了原本的样子,我们有时会想着去放下手中的工作,学会享受生活,品鉴人间趣味。在我国近五千年的历史长河中,茶文化对人们来说有着深厚含义。对于有着丰富生活阅历的人来说,品茶聊天就是最佳休闲方式。借此我产生了灵感设计了茶交流......
  • 基于SpringBoot的点餐系统的设计与实现-计算机毕业设计源码+LW文档
    摘要:随着移动互联网的快速发展,微信小程序作为一种轻量级、快速启动、无需下载安装的应用程序形式,在市场中越来越受欢迎。同时,餐饮行业也是一个充满机会的领域,尤其是在新冠疫情后,外卖、自取等模式逐渐成为餐饮行业的主要销售方式。因此,开发一款基于微信小程序的点餐系统,能够提高餐......
  • 基于微信小程序的景区服务系统-计算机毕业设计源码+LW文档
    摘要随着社会经济的发展,各行业竞争激烈,年轻群体工作压力大,越来越多的人希望通过旅游来缓解压力。而传统的旅行社都是通过事先定制的线路和固定时间,没有个性化定制服务,不能满足现代用户的需求。对于此,开发景区服务系统可以很好的解决用户个性化旅游的服务,通过系统查询各种景点信息,......