Codeforces Round #252 (Div. 2) D
http://codeforces.com/problemset/problem/441/D
置换群的基本问题,一个轮换内交换成正常顺序需要k-1次,k为轮换内元素个数
两个轮换之间交换元素,可以把两个轮换合并成1个,总交换次数+1
一个轮换内部交换,可以把一个轮换拆分成两个,总交换次数-1
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std ;
int n,m ;
int nxt[],vis[] ;
vector <pair<int,int> > ans ;
int cal()
{
memset(vis,,sizeof(vis)) ;
int st= ;
int cnt= ;
for(int i= ;i<=n ;i++)
if(!vis[i])
{
vis[i]=st++ ;
int res= ;
for(int j=nxt[i] ;!vis[j] ;j=nxt[j])
{
vis[j]=vis[i] ;
res++ ;
}
cnt+=(res-) ;
}
return cnt ;
}
int main()
{
scanf("%d",&n) ;
for(int i= ;i<=n ;i++)
scanf("%d",&nxt[i]) ;
scanf("%d",&m) ;
while()
{
int ret=cal() ;
if(ret==m)break ;
if(ret<m)//两个轮换换,可以把两个轮换合并成1个,ret+1 ,保证字典序最小,所以和位置1换
{
for(int i= ;i<=n ;i++)
if(vis[i]!=vis[])
{
swap(nxt[],nxt[i]) ;
ans.push_back(make_pair(,i)) ;
break ;
}
}
else//一个轮换内换,可以把一个轮换拆成两个,ret-1
{
int i,j ;
for(i= ;i<=n ;i++)
if(nxt[i]!=i)break ;
for(int j=i+ ;j<=n ;j++)
if(vis[j]==vis[i])
{
swap(nxt[i],nxt[j]) ;
ans.push_back(make_pair(i,j)) ;
break ;
}
}
}
printf("%d\n",ans.size()) ;
for(int i= ;i<ans.size() ;i++)
printf("%d %d ",ans[i].first,ans[i].second) ;
return ;
}
Codeforces Round #252 (Div. 2) D的更多相关文章
- Codeforces Round 252 (Div. 2)
layout: post title: Codeforces Round 252 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)
B. Valera and Fruits time limit per test 1 second memory limit per test 256 megabytes input standard ...
- codeforces Round #252 (Div. 2) C - Valera and Tubes
贪心算法,每条路径最短2格,故前k-1步每次走2格,最后一步全走完 由于数据比较小,可以先打表 #include <iostream> #include <vector> #i ...
- Codeforces Round #252 (Div. 2) B. Valera and Fruits
#include <iostream> #include <vector> #include <algorithm> #include <map> us ...
- Codeforces Round #252 (Div. 2) A - Valera and Antique Items
水题 #include <iostream> #include <set> #include <vector> #include <algorithm> ...
- CodeForces 441E(Codeforces Round #252 (Div. 2))
思路:dp[i][now][mark][len] i 表示当前第i 次now存的是后8位,mark为第9位为0还是1 len第九位往高位还有几位和第9位相等. 只存后8位的原因:操作只有200次 ...
- Codeforces Round #252 (Div. 2) 441B. Valera and Fruits
英语不好就是坑啊.这道题把我坑残了啊.5次WA一次被HACK.第二题得分就比第一题高10分啊. 以后一定要加强英语的学习,要不然就跪了. 题意:有一个果园里有非常多树,上面有非常多果实,为了不然成熟的 ...
- Codeforces Round #252 (Div. 2)-C,D
C题就是一个简单的模拟.首先给每一个人两个.然后把剩下的都给一个人就好了. 给的时候蛇形给. #include<stdio.h> #include<string.h> #inc ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- java编写编译器和解释器
on 2012-07-14 21:24 Bang 阅读(102) 评论(0) 编辑 收藏 续 第二部分 初始后端实现 框架后端支持编译器和解释器.现在框架抽象类Backend有两个极简版实现,一个 ...
- CTO详细讲解海量日志处理ELK
ELK实时日志分析平台之Elasticsearch简介 Elasticsearch是一个高度灵活的开源全文检索和分析引擎.它能够迅速(几乎是实时地)地存储.查找和分析大规模数据.通常被用在有复杂的搜索 ...
- C#中正确使用enum做Key的姿势
C#中自定义enum,然后将其作为Dictionary的Key,通常的做法如下: using System; using System.Text; using System.Collections.G ...
- Python 爬虫-正则表达式(补)
2017-08-08 18:37:29 一.Python中正则表达式使用原生字符串的几点说明 原生字符串和普通字符串的不同 相较于普通字符串,原生字符串中的\就是反斜杠,并不表达转义.不过,字符串转成 ...
- 你的centos/linux下有多个php.ini,不确定是哪个时
你的centos/linux下有多个php.ini,不确定是哪个时,但是你自己知道,你的php安装目录. 比如我的php安装目录是 /usr/local/php 那么可以通过命令来查找php.ini的 ...
- mycat分布式mysql中间件(自增主键)
一.全局序列号 全局序列号是MyCAT提供的一个新功能,为了实现分库分表情况下,表的主键是全局唯一,而默认的MySQL的自增长主键无法满足这个要求.全局序列号的语法符合标准SQL规范,其格式为:nex ...
- 49 BOM 和DOM
一.BOM window 对象 1.确认,输入, window.alert(123) // 弹框 let ret = window.confirm("是否删除") / ...
- UVA-11214 Guarding the Chessboard (迭代加深搜索)
题目大意:在一个国际象棋盘上放置皇后,使得目标全部被占领,求最少的皇后个数. 题目分析:迭代加深搜索,否则超时. 小技巧:用vis[0][r].vis[1][c].vis[2][r+c].vis[c- ...
- ajax中文乱码问题的总结
ajax中文乱码问题的总结 2010-12-11 22:00 5268人阅读 评论(1) 收藏 举报 ajaxurljavascriptservletcallback服务器 本章解决在AJAX中常见的 ...
- OAF Sample Code(转)
原文地址: OAF Sample Code