USACO 2.1-Sorting a Three-Valued Sequence
2016-04-25 16:43
459 查看
题目链接:http://train.usaco.org/usacoprob2?a=bzdILz0bsTb&S=sort3
/*
ID: m1590291
TASK: sort3
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
/****************************************************************************************************************
题意:给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
思路:
一,前后位置不相同的组成N个环,所有环的长度和减去环的个数就是所得解
二,图没有那么熟悉,就用了第二种,也是超NB的一种思路
1,如果两数位置都错了,并且交换后都在正确的位置,这一次交换肯定是必然的
跑一遍 把所有的符合上述条件的数交换回来 每次交换 num++;
2,剩下的就是3个数的位置都是错的,也可以通过两次交换达到正确位置 每次交换 num+=2;
其实可以不用交换,就检查一下在1的位置上有多少个不是1的,乘2即可
****************************************************************************************************************/
int a[1005],b[1005];
int main()
{
ifstream fin("sort3.in");
ofstream fout("sort3.out");
int N;
while(fin>>N)
{
for(int i = 0;i < N;i ++){
fin>>a[i];
b[i]=a[i];
}
sort(a,a+N);
int num=0;
int t;
for(int i = 0;i < N;i ++){
for(int j = 0;j < N;j ++){
if(i == j) continue;
if(b[i] != b[j] && b[i] == a[j] && b[j] == a[i]){
//fout<<"i= "<<i<<" j= "<<j<<endl;
//fout<<"b[i]= "<<b[i]<<" b[j]= "<<b[j]<<endl;
t=b[j];
b[j]=b[i];
b[i]=t;
num++;
break;
}
}
}
//fout<<num<<endl;
for(int i = 0;i < N;i ++)
if(a[i] == 1 && b[i] != 1)
num+=2;
fout<<num<<endl;
}
return 0;
}
/*
ID: m1590291
TASK: sort3
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
/****************************************************************************************************************
题意:给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
思路:
一,前后位置不相同的组成N个环,所有环的长度和减去环的个数就是所得解
二,图没有那么熟悉,就用了第二种,也是超NB的一种思路
1,如果两数位置都错了,并且交换后都在正确的位置,这一次交换肯定是必然的
跑一遍 把所有的符合上述条件的数交换回来 每次交换 num++;
2,剩下的就是3个数的位置都是错的,也可以通过两次交换达到正确位置 每次交换 num+=2;
其实可以不用交换,就检查一下在1的位置上有多少个不是1的,乘2即可
****************************************************************************************************************/
int a[1005],b[1005];
int main()
{
ifstream fin("sort3.in");
ofstream fout("sort3.out");
int N;
while(fin>>N)
{
for(int i = 0;i < N;i ++){
fin>>a[i];
b[i]=a[i];
}
sort(a,a+N);
int num=0;
int t;
for(int i = 0;i < N;i ++){
for(int j = 0;j < N;j ++){
if(i == j) continue;
if(b[i] != b[j] && b[i] == a[j] && b[j] == a[i]){
//fout<<"i= "<<i<<" j= "<<j<<endl;
//fout<<"b[i]= "<<b[i]<<" b[j]= "<<b[j]<<endl;
t=b[j];
b[j]=b[i];
b[i]=t;
num++;
break;
}
}
}
//fout<<num<<endl;
for(int i = 0;i < N;i ++)
if(a[i] == 1 && b[i] != 1)
num+=2;
fout<<num<<endl;
}
return 0;
}
相关文章推荐
- 334. Increasing Triplet Subsequence
- SoapUI之webservice接口测试(一)
- Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled
- UIView的alpha、hidden和opaque属性之间的关系和区别
- UIViewContentMode 图片显示模式
- String、StringBuffer与StringBuilder之间区别
- UISearchDisplayController灰色遮罩偏移
- 强制横屏
- make: *** /lib/modules/2.6.32-573.el6.x86_64/build: 没有那个文件或目录。 停止。
- 判断UITextField文本输入框的输入长度
- web.xml中<async-supported>true</async-supported>报错
- priority_queue and unordered_multimap
- Android 高级UI设计笔记14:Gallery(画廊控件)之 3D图片浏览
- Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled 独家解决!
- 修改了request ,存入mysql数据库仍乱码。。。
- 新手福利!一份详尽全面的UI设计字体与排版指南
- easyui 自定义表单内容验证(汉字、字母、数字、邮箱、电话、邮编、身份证号等)
- StringBuilder与StringBuffer的区别
- Require.js的用法
- android------sqlite中的 query() 参数分析-----------------------------------