Codeforces Round #252 (Div. 2)441D. Valera and Swaps
来源:互联网 发布:半条命剧情知乎 编辑:程序博客网 时间:2024/06/04 18:28
题目连接:http://codeforces.com/contest/441/problem/D
CF的第四题一般是比较难的。即使他只是Div.2。
感觉这道题如果这是输入任意最小的且我在比赛时没读错题目应该是可以过的。
题意:对于一个数组p,p里的所有数据都有pi=i时,我们称他为XX数组。然后第一行先输入数组长度N,第二行输入N个数。第三行输入一个K。题目问的是,当前数组要经过几次变换(PI和PJ交换)后再最少经过K次交换后变成XX数组(即所有的pi=i),然后再输出如何变换的,变换的条件是I和J的字典序要最小。
思路:当时我没有考虑字典序的问题,于是如果有pi==j&&pj==i就交换。如果没有,再一个一个交换过来,每次的I和J存在一个结构体里再用结果体快排输出。当然如果字典序最小的话是另外的思路至今没有相同。
贴一个大神的代码:
#include <iostream>using namespace std;int p[3001], h[3001];int main(){int n, m, i, j, k, hcnt, t, x;cin>>n;for (i=1; i<=n; i++) cin>>p[i];cin>>m;for (hcnt=0,i=1; i<=n; i++) {if (h[i]==0){h[i]=i;for (j=p[i]; j!=i; j=p[j])h[j]=i;hcnt++;}}if (n-hcnt==m) cout<<0<<endl;else if (n-hcnt>m) {i=n-hcnt-m;cout<<i<<endl;while (i--){for (j=1; p[j]==j; j++);for (k=j,x=p[j];p[k]!=j;k=p[k])if (p[k]<x) x=p[k];cout<<j<<" "<<x<<" ";t=p[j];p[j]=p[x];p[x]=t;}cout<<endl;}else{i = m+hcnt-n;cout<<i<<endl;while (i--){for (j=1; j<=n; j++) h[j]=0;for (h[1]=1,j=p[1]; j!=1; j=p[j])h[j]=1;for (j=1; h[j]==1; j++);cout<<"1 "<<j<<" ";t=p[j]; p[j]=p[1];p[1]=t;}cout<<endl;}return 0;}
0 0
- Codeforces Round #252 (Div. 2)441D. Valera and Swaps
- Codeforces Round #252(Div. 2) 441D. Valera and Swaps 置换群
- Codeforces Round #252 (Div. 2) D. Valera and Swaps(神奇的置换群)(好题)
- Codeforces Round #252 (Div. 2) 441B. Valera and Fruits
- Codeforces Round #252 (Div. 2) 441C. Valera and Tubes
- Codeforces Round #216 (Div. 2) D. Valera and Fools
- Codeforces Round #216 (Div. 2) D. Valera and Fools
- Codeforces Round #252 (Div. 2) C. Valera and Tubes
- Codeforces Round #252 (Div. 2)A. Valera and Antique Items
- Codeforces Round #252 (Div. 2)B. Valera and Fruits
- Codeforces Round #252 (Div. 2)-B. Valera and Fruits
- Codeforces Round #252 (Div. 2) A. Valera and Antique Items
- Codeforces Round #252 (Div. 2) B. Valera and Fruits
- Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)
- Codeforces Round #252 (Div. 2) 441A Valera and Antique Items
- Codeforces Round #252(Div. 2) 441A. Valera and Antique Items 水题
- Codeforces Round #252(Div. 2) 441B. Valera and Fruits 贪心
- Codeforces Round #252(Div. 2) 441C. Valera and Tubes 构造
- C++建立单向链表链表头指针需要使用指针类型的引用参数?
- 如何在maven工程中加载oracle驱动
- 数组和字典的应用数据
- 《剑指Offer》面试题3:二维数组中的查找(行列分别有序数组的二分查找)
- 黑马程序员—JAVA高新技术之JavaBean
- Codeforces Round #252 (Div. 2)441D. Valera and Swaps
- linux文件打开模式
- 易簡險阻章
- Sql注入
- Android06_contacts的数据库分析以及页面的显示
- 文件操作1
- 工作流 workflow 理论知识
- SWT的介绍(配置,打包步骤)
- 殷之末世章