B - Derangement

2023-10-27

题目链接
题解:用最少的改变两个数的位置使得a[i]!=i;
题解:很简单,但是注意细节。
下面试rte 2 的代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int N=1e6+10;
int a[N];
vector<int> vec;
int main()
{
    int n;
    scanf("%d",&n);
    int cou=0;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        if(a[i]==i) vec.push_back(a[i]);
    }
    if(vec.size()%2==0)
    {
        printf("%d\n",vec.size()/2);
        for(int i=0;i<vec.size()-1;i+=2)
        {
            printf("%d %d\n",vec[i],vec[i+1]);
        }
    }
    else
    {
        printf("%d\n",vec.size()/2+1);
        for(int i=0;i<vec.size()-2;i+=2)
        {
            printf("%d %d\n",vec[i],vec[i+1]);
        }
        printf("%d %d\n",vec[n-2],vec[n-1]);
    }
    return 0;
}

发现rte后找了很久没有找到错误,后来试了试,发现错在了vec.size()这,在[]里不能用.size(),最后在外面有一个len=vec.size()后再带入。
下面是wa7的代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
    vector<int> vec;
    int n;
    scanf("%d",&n);
    int cou=0;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        if(a[i]==i) vec.push_back(a[i]);
    }
    if(vec.size()%2==0)
    {
        int len=vec.size();
        printf("%d\n",len/2);
        for(int i=0;i<len-1;i+=2)
        {
            printf("%d %d\n",vec[i],vec[i+1]);
        }
    }
    else
    {
        int len=vec.size();
        printf("%d\n",len/2+1);
        for(int i=0;i<len-2;i+=2)
        {
            printf("%d %d\n",vec[i],vec[i+1]);
        }
        printf("%d %d\n",vec[len-2],vec[len-1]);
    }
    return 0;
}

这个试一下 3 3 2 1 这个样例,很明显是错的。
下面是ac代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
    vector<int> vec;
    int n;
    scanf("%d",&n);
    int cou=0;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        if(a[i]==i) vec.push_back(a[i]);
    }
    if(vec.size()%2==0)
    {
        int len=vec.size();
        printf("%d\n",len/2);
        for(int i=0;i<len-1;i+=2)
        {
            printf("%d %d\n",vec[i],vec[i+1]);
        }
    }
    else
    {
        int len=vec.size();
        printf("%d\n",len/2+1);
        for(int i=0;i<len-2;i+=2)
        {
            printf("%d %d\n",vec[i],vec[i+1]);
        }
        if(vec[len-1]==1) printf("%d %d\n",vec[len-1],n);
        else printf("%d %d\n",vec[len-1],1);
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

B - Derangement 的相关文章

  • poj 2096 Collecting Bugs

    Problem poj org problem id 2096 vjudge net contest 151678 problem Q Reference blog csdn net xingyeyongheng article detai
  • 导出一个schame并排除不必要的表

    由于测试的需要 下午收到一个邮件 要求搭建一个测试环境 使用expdp导数据的时候 将数据量大于1千万的表只导一部分 其他的表全部导出 然后看了一下要导出的表一共有545张 然而有大概30多张表的数据量大于1千万行 表那么都 不可能一张一张
  • 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?

    matlab中如何应用regress 函数进行线性回归分析 回归分析是研究一个随机变量与一个或多个普通变量之间的相关系的统计方法 如果做回归分析 有很多软件都已经封装好了的 我们只需直接调用就可以了 例如Matlab中的regress 就是
  • 视频监控智能分析之火焰检测原理

    一 应用背景 基于视频分析的室内 室外烟火自动检测预警系统的目的是能够实现无人值守的不间断工作 自动发现监控区域内的异常烟雾和火灾苗头 以最快 最佳的方式进行告警和协助消防人员处理火灾危机 并最大限度的降低误报和漏报现象 同时还可查看现场实
  • AI实战营第二期——第一次作业:基于RTMPose的耳朵穴位关键点检测

    文章目录 题目 基于RTMPose的耳朵穴位关键点检测 背景 任务 数据集 训练目标检测器 错误 NameError name unicode is not defined 评估目标检测器 训练关键点检测器 评估关键点检测器 模型轻量化转换
  • USB——眼图测试常识

    最近的项目外设的USB总是传输数据异常 供应商建议我们做USB眼图测试 对于纯软件出身的我对USB本身都知之甚少 更别提眼图了 赶紧补课 如果将被测信号输入示波器 并且当示波器的触发时钟和被测信号同步时 在示波器上显示的图形很象人的眼睛 因
  • 持安科技入选CCIA2023年中国网安产业潜力之星!

    近日 中国网络安全产业联盟 CCIA 公布2023年中国网安产业潜力之星 持安科技作为零信任领域明星创业公司 成功入选榜单 中国网络安全产业联盟 CCIA 自2023年3月份启动网络安全企业发展情况调研工作 本次调研延续前五次产业调研模式
  • VSCODE设置自动换行后仍然无法在视区宽度内自动换行

    问题 百度如何设置vscode在视区内自动换行 查到的是设置word wrap设置为 on 即可 但我设置后仍然无法在视区宽度内自动换行 原因 设置错误 在vscode选项里搜索 wordwrap 会出现两个结果 第一个是Diff edit
  • 2017.5.27测试 2. 刷题(P1167)

    2 刷题 c pas cpp c 题目背景 好啊 一言为定 作为蒟蒻的GJY竟然约定和神犇来一场世纪大战 题目描述 GJY在期末的时候跟神犇约定了一次战争 这对于GJY来说可是一件具有挑战性并十分困难的事情 所有GJY从现在开始就要努力学习

随机推荐