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]的更多相关文章

  1. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  2. ACM题集以及各种总结大全!

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  3. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  4. poj 3254 状压dp入门题

    1.poj 3254  Corn Fields    状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...

  5. poj 3841 Double Queue (AVL树入门)

    /****************************************************************** 题目: Double Queue(poj 3481) 链接: h ...

  6. poj 2823 Sliding Window (单调队列入门)

    /***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...

  7. poj 1741 树的点分治(入门)

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18205   Accepted: 5951 Description ...

  8. Oil Deposits(poj 1526 DFS入门题)

    http://poj.org/problem?id=1562                                                                       ...

  9. 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 ...

随机推荐

  1. c语言基础学习02_windows系统下的cmd命令

    =============================================================================注意:cmd的命令很多,需要用的时候可以查询即 ...

  2. 安装myeclipse后,打开时弹出:“该站点安全证书的吊销证书不可用”,怎样解决?

    1.当弹出"该站点安全证书的吊销信息不可用.是否继续?"的对话框时,点击"查看证书",切换到"详细信息"TAB页,找到其"CRL分 ...

  3. Asp.net mvc 中的路由

    在 Asp.net mvc 中,来自客户端的请求总是针对某个 Controller 中的 Action 方法,因此,必须采用某种机制从请求的 URl 中解析出对应的 Controller 和 Acti ...

  4. [原创]消灭eclipse中运行启动的错误:“找不到或无法加载主类”问题

    最近一直遇到这个问题且根据网上的文章做法基本无法通过,故将自己的解决步骤记录及分享给大家. 一:环境必须要配置好. 试试在dos界面输入:java.javac 分别这两个命令是否能执行,如果都能执行恭 ...

  5. Oracle积累

    Oracle积累 1           用To_char()转换带小数的数值. 例如:0.125 取两位小数. To_char(0.125,'FM990.99')   -> 0.13 注: 格 ...

  6. WPF 简易新手引导

    这两天不忙,所以,做了一个简易的新手引导小Demo.因为,不是项目上应用,所以,做的很粗糙,也就是给需要的人,一个思路而已. 新手引导功能的话,就是告诉用户,页面上操作的顺序,第一步要做什么,第二步要 ...

  7. 2017-06-20 (pwd ls cd)

    pwd pwd   显示当前所在的位置 pwd -P  如果是链接文件,显示链接文件所指的位置 ls ls 查询目录中的内容 ls  -a 显示所有的文件,包含隐藏的文件   -l 显示详细的信息   ...

  8. SpringMVC的filter怎么使用Autowired依赖注入bean

      有的时候根据我们业务的需要,我们需要在web项目中定义一个自己的filter,并想在这个filter中使用@Autowired注入bean供我们使用.如果直接使用的话是不行的,需要我们在xml文件 ...

  9. SVN使用基础

    1.安装svn centos:yum install subversion -y ubuntu:apt-get install subversion -y 2.创建库目录 mkdir /opt/.sv ...

  10. _0_web_基础

    创:18_3_2017修:20_3_2017 什么是前端? --在浏览器中展示内容以及处理请求 什么是浏览器? --一款能将网页内容展现给用户查看,并且让用户与网页交互的软件 什么是内核? --渲染引 ...