题目:只允许交换相邻元素的排序,统计将最小交换次数。
分析:分治,逆序数。在合并排序的过程中进行逆序对的求解。
合并A,B两个字串时利用两根指针作为计数;
当B中元素放入新数组时A中所剩元素一定大于B;
每次计数加和即可。
说明:置换群 可以用来计算任意最小交换。。。 (2011-09-20 14:25)
#in...
分类:
其他好文 时间:
2014-09-16 09:17:40
阅读次数:
173
CARDSTime Limit:1000MSMemory Limit:10000KTotal Submissions:1448Accepted:773DescriptionAlice and Bob have a set of N cards labelled with numbers 1 ... ...
分类:
其他好文 时间:
2014-09-11 22:07:02
阅读次数:
183
HDU 4985 Little Pony and Permutation(数学 置换群)...
分类:
其他好文 时间:
2014-09-09 12:58:28
阅读次数:
215
# include
# include
# include
using namespace std;
__int64 gcd(__int64 a,__int64 b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
int n,k,i,j,vis[810],m,num[810],x;
...
分类:
其他好文 时间:
2014-09-03 11:23:25
阅读次数:
192
//给出置换了s次后的序列,求原序列
# include
# include
# include
using namespace std;
int main()
{
int n,s,t,s1,i,cot;
int a[1010],b[1010],c[1010];
while(~scanf("%d%d",&n,&s))
{
for(i=1; i<...
分类:
其他好文 时间:
2014-09-02 21:29:15
阅读次数:
381
/*
对于每一个群,我们有两种换发:
1.群里换,拿群里最小的数t与其他每个数交换,共k-1次,花费为:sum+(k-2)*t.
2.将这个数列最小的数minn,拉入这个群,与该群最小的数t交换,然后用这个最小的数与其他数交换k-1次,然后再将minn与t换回来,这样
花费为:sum+t+(k+1)*minn
那么最小花费我们取两者中最小的,即sum+min{(k-2)*t,t+(k+1)*min...
分类:
其他好文 时间:
2014-09-02 15:59:54
阅读次数:
189
//问最少置换多少次变成有序序列
//每个位置都有个循环节 求全部位置循环节的最小公倍数
# include
# include
# include
using namespace std;
int gcd(int x,int y)
{
if(y==0)
return x;
return gcd(y,x%y);
}
int lcm(int x,int y)
{...
分类:
其他好文 时间:
2014-09-02 15:51:04
阅读次数:
223
昨晚BestCoder第一题:一开始看了半天不知所云2333333其实它是让求置换群的轮换比如对于原题中的有o(1)=2, o(2)=5, o(3)=4, o(4)=3, o(5)=1其中o(1)=2,o(2)=5,o(5)=1就是一个轮换,转了一圈之后又回来了233同理,o(3)=4, o(4)=...
分类:
其他好文 时间:
2014-09-01 17:29:23
阅读次数:
262
这道题的问题就是说能否对一个给定的置换进行开方运算
关于这个问题讲的最为详细的是05年集训队论文
潘震皓:《置换群快速幂运算研究与探讨》
对于一个长度为l的轮换,若gcd(l,k)==1,则可以开k方
若gcd(l,k)!=1则对于单个循环是不能开k方的
而若有m个长度为l的轮换,只需要保证gcd(m*l,k)==m就可以
因为开k方是k次方的逆运算,只要保证目标轮换的k次方会分裂...
分类:
其他好文 时间:
2014-08-12 00:47:13
阅读次数:
212
首先我有一个很吊的学长叫lmy,还有一个更吊的学长叫zxz于是我打开了poj做他们做过的题。第一个是1026.读没太读懂,于是搜了下题解。话说现在70行一下的代码我一般都一眼看懂,除了一些数论的和一些奇葩的。他们说是置换群。反正能求周期求lcm,乱搞就好了,整那么多无聊的理论干啥。
分类:
其他好文 时间:
2014-07-31 09:39:45
阅读次数:
161