• P1459 三值的排序 Sorting a Three-Valued Sequence


    题目描述

    排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。

    写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数

    输入输出格式

    输入格式:

     

    第一行:

    奖牌个数N (1 <= N <= 1000)

    第 2行到第N+1行:

    每行一个数字,表示奖牌。共N行。(1..3)

     

    输出格式:

     

    共一行,一个数字。表示排成升序所需的最少交换次数。

     

    输入输出样例

    输入样例#1: 复制
    9
    2
    2
    1
    3
    3
    3
    2
    3
    1
    输出样例#1: 复制
    4
    

    说明

    USACO 2.1

    翻译来自NOCOW

    刚开始随便写了写,,

    受到之前某题的影响,,

    写了一个,,很,,,什么什么的代码,,

    就是乱搞,数据太水,还拿了87,

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 int n,ans;
     9 int a[1002],b[1002];
    10 
    11 int main()
    12 {
    13     scanf("%d",&n);
    14     for(int i=1;i<=n;++i)
    15     {
    16         scanf("%d",&a[i]);
    17         b[i]=a[i];
    18     }    
    19     sort(b+1,b+n+1);
    20     for(int i=1;i<=n;++i)
    21         if(b[i]!=a[i])
    22             ans++;
    23     if(ans%2==1)
    24         printf("%d",ans/2+1);
    25     else printf("%d",ans/2);
    26     return 0;
    27 }
    87乱搞

    这就是个贪心题啊,,

    题解里的代码都好长啊。。。。

    二维的,,三维的,,

    一维的不行吗。。

    然后就去看了某学姐博客,,

    哇,短,我喜欢。

    哇!这思路,贼牛逼。

    哇!amazing!

    这么神奇,

    我怎么可能会想到这种方法。。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 int n;
     9 int a[1002],b[4],c[4];
    10 
    11 int main()
    12 {
    13     scanf("%d",&n);
    14     for(int i=1;i<=n;++i)
    15     {
    16         scanf("%d",&a[i]);
    17         b[a[i]]++;
    18     }    
    19     for(int i=1;i<=b[1]+b[2];++i)
    20     {
    21         if(a[i]==3) c[3]++;
    22         else if(a[i]==2&&i<=b[1]) c[1]++;
    23         else if(a[i]==1&&i>b[1]) c[2]++;
    24     }    
    25     int x=max(c[1],c[2]);
    26     printf("%d",c[3]+x);
    27     return 0;
    28 }

    如果你不开心,那我就把右边这个帅傻子分享给你吧, 

    你看,他这么好看,那么深情的望着你,你还伤心吗? 

    真的!这照片盯上他五秒钟就想笑了。 

    一切都会过去的。

     

  • 相关阅读:
    Codeforces 960B(优先队列)
    “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(逆元)
    AcWing
    POJ
    POJ
    AtCoder
    HRBUST
    CodeForces
    HYSBZ
    HDU
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9434551.html
Copyright © 2020-2023  润新知