首页 > 其他分享 >Codeforces Global Round 20--F1

Codeforces Global Round 20--F1

时间:2022-12-21 01:55:06浏览次数:61  
标签:F1 ch 20 -- int while read now define

F1. Array Shuffling

结论

交换的次数=点数-循环圈的数量
所以只需要构造尽量多的循环圈,圈上的各个元素都是不相同的就可以了。

代码

#include <bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define TT int _=read();while(_--)
#define endl '\n'
const int M=2e5+5;

inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}

inline void print(int x) {
    if(x<0){putchar('-');x=-x;}
    if(x/10)print(x/10);
    putchar(x%10+'0');
}
//二分不要乱用边界
int a[M],b[M];
vector<int>g[M];

signed main() {
    TT {
        int n=read();
        for(int i=1;i<=n;i++)g[i].clear();
        for(int i=1;i<=n;i++) {
            a[i]=read();
            g[a[i]].push_back(i);
        }
        queue<int>q;
        for(int i=1;i<=n;i++)
            if(g[i].size()>0)q.push(i);
        int now=0;
        while(q.size()>1) {
            queue<int>tmp;
            vector<int>v;
            while(!q.empty()) {
                int x=q.front();
                q.pop();
                v.push_back(g[x][now]);
                if(now+1<g[x].size())tmp.push(x);
            }
            for(int i=1;i<v.size();i++)
                swap(a[v[i]],a[v[i-1]]);
            q=tmp;
            now++;
        }
        for(int i=1;i<=n;i++)cout<<a[i]<<' ';cout<<endl;
    }
    return 0;
}

//那怎么求一个数组的最少的交换次数呢??

标签:F1,ch,20,--,int,while,read,now,define
From: https://www.cnblogs.com/basicecho/p/16995442.html

相关文章

  • Python unittest+ddt+openpyxl+configparser
    1.技术介绍框架:unittest请求处理:requestsexcel数据处理:openpyxl参数化:ddt配置解析器:configparser报告模板:HTMLTestRunnerNew.py(下载地址:https://pan.baidu.com/s/1......
  • 缓存
    缓存都有哪些?缓存的类型分为:本地缓存、分布式缓存和多级缓存。本地缓存:本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用LRUMap来实现,也可以使用Ehcache......
  • pandas替换,加载,透视表
    pandas的级联和合并级联操作pd.concat,pd.appendpandas使用pd.concat函数,与np.concatenate函数类似,只是多了一些参数:objsaxis=0keysjoin='outer'/'inner':表示......
  • Linux xattr shell command All In One
    LinuxxattrshellcommandAllInOnemacOS$manxattr>xattr.mdmanxattrXATTR(1)GeneralCommandsManualXAT......
  • Linux Shell开发功能点
    背景需要操作一批次服务器安装Docker功能特色一键执行bash<(curl-s-Lhttp://server.com/installDocker.sh)MemberNode参数传递hostname修改if[!-n"$1"......
  • kubernetes-pod
    Pod作为k8s的核心对象,所有的k8s功能都必须通过Pod来实现。如何使用YAML描述PodPod是一个API对象,它必然具有apiVersion、kind、metadata、spec这四个字段apiVersion:v1......
  • vue3 Composition API使用
    Vue3新增了CompositionAPI。我们只需将实现某一功能的相关代码全部放进一个函数中,然后return需要对外暴露的对象。不同功能的代码都是一个个函数,最终在setup()函数中......
  • Python 配置参数解析器configparse
    1.configparse介绍configparser是python自带的配置参数解析器。可以用于解析.config文件中的配置参数。ini文件中由sections(节点)-key-value组成2.安装:pipinstallc......
  • JDK、JRE、JVM三者之间的关系?
     JDK安装目录下有一个【jre】目录(bin->【jvm】,lib->jvm工作所需类库)JVM体系结构与运行原理 JDK基础概念及目录结构JDK指的就是Java开发工具包。我们依靠JDK开发和......
  • kubernetes-使用yaml
    查询k8s支持的对象kubectlapi-resources#查看当前版本支持的所有对象kubectlexplainpodkubectlexplainpod.metadatakubecltexplainpod.speckubecltexplai......