置换群好题

1.CF Round 252 Div 2 D

题目大意:

给出一个N的排列,求至少通过多少次交换使得这个排列至少通过m次排列才能变成升序。

题解:

1.首先可以通过划分子群的方法求出初始排列需要的交换次数。 然后分次数不够和超出m两种情况考虑。

2.如果次数太多,说明子群太多,需要合并子群。  然后草稿纸上画一下可以发现 交换两个数实际上就是交换它们的出边。 又可以发现如果两个数不在同一个子群里,交换它们,会把这两个子群合并。  所以暴力合并就好了。

3.如果次数太少,说明子群不够,需要分裂子群。 如果两个数在同一子群里,交换它们会使原来的子群分裂为2个子群。 所以暴力找大小不为1的子群 分拆就好。



2.Cow Sorting(poj 3270)

题目大意:

给出一个数列(没有相同元素),交换两个数的代价是它们的权值和,求把它们排序的最小代价。

题解:

首先划分子群。然后子群和子群之间是没啥影响的,所以只要把每个子群排好序就好。

这里有个贪心地方:

1.可以用子群(假设大小为n)中的最小元素k和其他元素来交换。  总代价是 k*(n-1)+sum

2.可以先把整个数列最小的元素r和子群(假设大小为n)中的某个元素s交换,引入最小元素,然后用这个最小元素和子群中每个数交换,再把这个最小元素换走。

总代价是r*(n+1)+s+sum.   显然s取子群中最小的最优。

对于每个子群,选取上面2种方案中更优的那个。

时间: 2024-11-05 15:56:31

置换群好题的相关文章

poj 3270 Cow Sorting 置换群 简单题

假设初始状态为 a:2 3 1 5 4 6 则目标状态为 b:1 2 3 4 5 6且下标为初始状态中的3 1 2 4 5 6(a[3],a[1]...) 将置换群写成循环的形式 (2,3,1),(5,4),6就不用移动了. 移动方式2种 1:选循环内最小的数和其他len-1个数交换 2:选整个序列最小的数和循环内最小的数交换,转到1,再换回来. #include<cstdio> #include<queue> #include<algorithm> #include&

2017-03-17 Codeforces 441D 置换群,好题 bzoj 4750 思维,按位计算

Codeforces 441D 题意:定义理想序列a[]:对于任意的i有a[i] = i.给出一个1到n的排列p[],可以将排列中的任意两个元素两两交换,定义f(p)为将p变为理想排列的最少交换次数,求将p变成排列q,使得f(q) = m 的最少交换次数和交换方案. tags:才知道置换群,看题解码的.. 使得一个排列有序的最小交换次数 = n - 置换群数目. 置换群,A->B,B->C,C->A,相当于一个轮换.   记住三点: 1.一个大小为L的置换群里面的元素至少且必能互换L-1

LightOJ 1166 Old Sorting 置换群 或 贪心 水题

LINK 题意:给出1~n数字的排列,求变为递增有序的最小交换次数 思路:水题.数据给的很小怎么搞都可以.由于坐标和数字都是1~n,所以我使用置换群求循环节个数和长度的方法. /** @Date : 2017-07-20 14:45:30 * @FileName: LightOJ 1166 贪心 或 置换群 水题.cpp * @Platform: Windows * @Author : Lweleth ([email protected]) * @Link : https://github.co

【置换群】CH Round #63 - OrzCC杯#2省选热身赛 exchange

第一问置换群裸题. 第二问单独考虑某个循环,任意交换两个元素,稍微画一下就会发现,把该循环拆成了2个,剩下所需的交换次数减少了1,也就是说,第一步我们任意交换,都能够保证交换次数最少.于是一个循环的答案就是n*(n-1)/2,把所有的加起来即可. 进而我们发现,在剩下的步骤里面,我们只需在拆出来的两个循环里任意交换即可. #include<cstdio> using namespace std; #define N 50001 bool vis[N]; int n,op,a[N],sumv,s

置换群(等价类计数)

一.定义 群 ??群是啥???我不会啊 置换(\(g\)) ??一个置换是一种运算,代表让物体交换位置的一种方法 置换群(\(G\)) ??顾名思义,由置换构成的群 k不动置换类(\(Z_k\))(稳定化子) ??使元素 \(k\) 不改变位置的群的集合 等价类(\(E_k\))(轨道) ??在置换群 \(G\) 作用下元素 \(k\) 的运动轨迹(一些点的集合) 循环(\(h_g\)) ??在置换 \(g\) 作用下产生的循环 轨道-稳定化子定理 \[|E_k|\times|Z_k|=|G|\

ACM算法总结及刷题参考

参考:http://bbs.byr.cn/#!article/ACM_ICPC/11777 OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965)    (2)贪心(poj1328,poj2109,poj2586)    (3)递归和分治法.     (4)递推.     (5)构造法.(po

poj 3270 Cow Sorting(初涉置换群)

http://poj.org/problem?id=3270 大致题意:给出n个整数,要将它们转化成递增序列,每交换其中两个数的代价是这两个数之和.问排序成功后的最小代价. 该题考察的是置换群知识.在黑书p247上有详细的讲解.总结下置换群,方便复习. 群:给定一个集合G={a,b,c...}和集合G上的二元运算 ·,如果满足封闭性,结合律,存在单位元和逆元,则成集合G在运算'·'之下是一个群. 置换:n个元素1,2,....,n之间的置换可表示为  1     2     3     ...

嗷嗷嗷,kuangbin大大博客上拉的题

正在学(learning),未学(waiting),已学(cut  vovering) 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.  

!HDU 4345 置换群的环长有多少种-dp

题意:置换群,问环的长度有多少种 分析: 环的长度就是每次你选择的区间长度的最小公倍数.总区间长度是n,那么这道题就是求和等于n的各个数的最小公倍数有多少种. 状态:dp[i][j]前i个质数,区间长度不超过j的最优解 转移:dp[i][j]=dp[i-1][j]+dp[i-1][j-k],k=prim[i]^1,2... 这题和上一题的dp难哭我了. 代码: #include<iostream> #include<cstdio> #include<algorithm>