POJ置换群入门[3/3]
POJ 3270 Cow Sorting
题意:
一个序列变为升序,操作为交换两个元素,代价为两元素之和,求最小代价
题解:
看了黑书...
首先循环因子分解
一个循环完成的最小代价要么是循环中最小元素依次与其他交换,要么引入全局最小值来交换
$sum+min(mn*(len-2),mn+Min*(len+1))$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e4+,M=1e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,a[N],c[M],Min=M,m;
int f[N],ans;
bool vis[N];
int main(){
//freopen("in","r",stdin);
n=read();
for(int i=;i<=n;i++)
a[i]=read(),c[a[i]]++,Min=min(Min,a[i]),m=max(m,a[i]);
for(int i=;i<=m;i++) c[i]+=c[i-];
for(int i=;i<=n;i++) f[i]=c[a[i]];
for(int i=;i<=n;i++) if(!vis[i]){
vis[i]=;
int u=f[i],sum=a[i],mn=a[i],len=;
while(u!=i) vis[u]=,sum+=a[u],mn=min(mn,a[u]),len++,u=f[u];
ans+=sum+min(mn*(len-),mn+Min*(len+));
}
printf("%d",ans);
}
POJ2369 Permutations
题意:
求一个置换的几次幂得到自身
题解:
每个循环长度的最小公倍数
注意是几次幂不是转换了几次!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e3+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,a[N],ans=;
inline int gcd(int a,int b){return b==?a:gcd(b,a%b);}
inline int lcm(int a,int b){return a/gcd(a,b)*b;}
bool vis[N];
int main(){
//freopen("in","r",stdin);
n=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=n;i++) if(!vis[i]){
vis[i]=;
int u=a[i],len=;
while(u!=i) vis[i]=,len++,u=a[u];
ans=lcm(ans,len);
}
printf("%d",ans);
}
POJ1721CARDS
题意:
交换规则为$i \rightarrow a[a[i]]$,进行了$s$次,给出最后的排列求一开始
题解:
一直尝试构造置换的逆一直失败,也许是因为每次合成的置换都不同吧
网上的做法是暴力找整个置换的循环然后把剩下的操作补出来...感觉会被卡...
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,s,a[N],t[N],b[N];
int main(){
freopen("in","r",stdin);
n=read();s=read();
for(int i=;i<=n;i++) b[i]=a[i]=read();
int cnt=;
while(true){
int flag=;
cnt++;
for(int i=;i<=n;i++) t[i]=a[a[i]];
for(int i=;i<=n;i++){
a[i]=t[i];
if(a[i]!=b[i]) flag=;
}
if(flag) break;
}
cnt=cnt-s%cnt;
while(cnt--){
for(int i=;i<=n;i++) t[i]=a[a[i]];
for(int i=;i<=n;i++) a[i]=t[i];
}
for(int i=;i<=n;i++) printf("%d\n",a[i]);
}
POJ置换群入门[3/3]的更多相关文章
- [转] POJ图论入门
最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...
- ACM题集以及各种总结大全!
ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...
- ACM题集以及各种总结大全(转)
ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...
- poj 3254 状压dp入门题
1.poj 3254 Corn Fields 状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...
- poj 3841 Double Queue (AVL树入门)
/****************************************************************** 题目: Double Queue(poj 3481) 链接: h ...
- poj 2823 Sliding Window (单调队列入门)
/***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...
- poj 1741 树的点分治(入门)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 18205 Accepted: 5951 Description ...
- Oil Deposits(poj 1526 DFS入门题)
http://poj.org/problem?id=1562 ...
- POJ P2318 TOYS与POJ P1269 Intersecting Lines——计算几何入门题两道
rt,计算几何入门: TOYS Calculate the number of toys that land in each bin of a partitioned toy box. Mom and ...
随机推荐
- python对象的基本操作代码
基础: #对象.方法() # a=1 # b=a # a=2 # # _a=2423 # # print(a) # print(b) # # print(False and False) # prin ...
- line-height相关总结
line-height http://cindylu520.iteye.com/blog/670512 四个boxes containing boxes inline boxes 匿名inline b ...
- 微信小程序学习笔记
一.文件结构解析 pages文件夹: 书写各个页面代码以及组件.内部js文件书写js ; wxml文件为HTML ; wxss文件为css样式 : json文件为配置当前页面的默认项,如titl ...
- 字符串API
string可以看成是多个字符组成的只读数组,也可以通过下标去访问某个字符 访问i位置的字符 : str[i] 字符个数: str.length 倒数第n个字符 : str[str.length- ...
- Hive总结(七)Hive四种数据导入方式
- 一简单的RPC实例(Java)
来至于阿里liangf:如有冒犯,请原谅 RPCFrameWork: package com.sunchao.demo; import java.io.IOException; import java ...
- RGB颜色设置错误
[UIColor colorWithRed:<#(CGFloat)#> green:<#(CGFloat)#> blue:<#(CGFloat)#> alpha:& ...
- Intel系列微处理器的三种工作模式
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 判断具有某个属性js、jQuery
if(!rr.classList.contains('invalid')){ updateCount(i,-1);//更新tab数量 } /*if(!$(rr).hasClass('invalid') ...
- Certificate downloaded from cloudexpress:11443 is invalid
问题描述: CertificateManagement : Server is not trusted.Received fatal alert: handshake_failure. Now ins ...