USACO代码解析Sorting A Three-Valued Sequence (sort3)

更新时间:2023-07-03 09:58:32 阅读: 评论:0

描述
排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。
写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
[编辑]格式
PROGRAM NAME: sort3
INPUT FORMAT:
(file sort3.in)
第一行:
奖牌个数N (1 <= N <= 1000)
第 2行到第N+1行:
每行一个数字,表示奖牌。共N行。(1..3)
银行存款利息计算
OUTPUT FORMAT:
(file sort3.out)
共一行,一个数字。表示排成升序所需的最少交换次数。
豪杰是什么意思[编辑]SAMPLE INPUT
9
2
2
1
3
3
3怎么治疗甲亢
2
3
1
[编辑]SAMPLE OUTPUT
4
分析
题意求排序所需的最少移动次数,可以先将输入的数字排序,然后得到不同的地方
比如:
2 2 1 3 3 3 2 3 1
1 1 2 2 2 3 3 3 3
用一个组合(a,b)表示应该排序后某个位置应该是a,但之前的是b
则我们得到(1,2), (1,2), (2,1), (2,3), (2,3), (3,2), (3,1)
然后求这些组合能组成的环,结果就是所有环的长度和减去环的个数
(1,2), (2,1) ---长度为2
(1,2), (2,3), (3,1) ---长度为3
(2,3), (3,2) ---长度为2
结果2+3+2-3=4
这个不怕题目改为1234排序。。。下面的就怕:
另一个简单的思路
我是没看懂前面的...所以自己想了一个 首先 如果两数位置都错了,并且交换后都在正确的位置,这一次交换肯定是必然的 跑一遍 把所有的符合上述条件的数交换回来 每次交换ANS++;
剩下的就是3个数的位置都是错的,也可以通过两次交换达到正确位置 每次交换ans+=2; (其实可以不用交换,就检查一下在1的位置上有多少个不是1的,乘2即可):
炸汤圆
#include<fstream>
using namespace std;
ifstream fin("sort3.in");
ofstream cout("sort3.out");
 
int n,a[1001],b[1001],num[4][4]={0},ans=0;
mac字体安装 
int main()
{
    int i,j;
    fin>>n;
    for(i=1;i<=n;i++)
    {
    fin>>a[i];
    b[i]=a[i];                             
                    }
 
    for(i=1;i<=n;i++)
    for(j=i+1;j<=n;j++)
    if(b[i]>b[j]) swap(b[i],b[j]);               
 
 
    for(i=1;i<=n;i++)
    num[b[i]][a[i]]++;
 
    j=min(num[1][2],num[2][1]);
    num[1][2]-=j;
    num[2][1]-=j;
    ans+=j;
 
    j=min(num[1][3],num[3][1]);
    num[1][3]-=j;
    num[3][1]-=j;上海动物园
    ans+=j;
 
    j=min(num[3][2],num[2][3]);
    num[3][2]-=j;
    num[2][3]-=j;
    ans+=j;
 北汉山
    ans+=max(num[1][2],num[2][1])*2;
 
    cout<<ans<<endl;
 
//  system("pau");
    return 0;
超虐的小说
 
    }

本文发布于:2023-07-03 09:58:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1075846.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:排序   交换   所需   数字
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图