• Sorting a Three-Valued Sequence chapter 2.1


      大概思路:fin读取时记录1,2,3对应个数,然后从buf[1]开始,枚举遍历。1,2,3最终位置和是由count[1..2..3]形成的3个区间,若buf[i]再对应区间,则continue;若不再,则遍历最终位置所在的区间,寻找是否存在两数交换恰好后都在最终位置的index,若有,交换,若无,随意选择一处交换,每次交换step++;又是一次ac,,^_^o~ 努力!

      1 /*
      2 
      3 ID: hubiao cave
      4 
      5 PROG: sort3
      6 
      7 LANG: C++
      8 
      9 */
     10 
     11 
     12 
     13 
     14 #include<iostream>
     15 
     16 #include<fstream>
     17 
     18 #include<string>
     19 
     20 using namespace std;
     21 
     22 
     23 int number;
     24 int buf[1002];
     25 int cou[4];
     26 int step;
     27 
     28 void proc();
     29 int swapdir(int index,int value);
     30 int swap(int&,int&);
     31 
     32 int main()
     33 
     34 {
     35 
     36 
     37 
     38 
     39     ifstream fin("sort3.in");
     40 
     41     ofstream fout("sort3.out");
     42     fin>>number;
     43     for(int i=1;i<=number;i++)
     44     {
     45         fin>>buf[i];
     46         cou[buf[i]]++;
     47     }
     48     proc();
     49     fout<<step<<endl;
     50 
     51     return 0;
     52 
     53 
     54 }
     55 void proc()
     56 {
     57     for(int i=1;i<=number;i++)
     58     {
     59         if(buf[i]==1)
     60         {
     61             if(i<=cou[1])
     62                 continue;
     63             else
     64             {
     65                 swapdir(i,1);
     66             }
     67         }
     68         if(buf[i]==2)
     69         {
     70             if(i<=cou[2]+cou[1]&&i>cou[1])
     71                 continue;
     72             else
     73                 swapdir(i,2);
     74         }
     75         if(buf[i]==3)
     76         {
     77             if(i<=cou[1]+cou[2]+cou[3]&&i>cou[1]+cou[2])
     78                 continue;
     79             else
     80                 swapdir(i,3);
     81         }
     82     }
     83 }
     84 
     85 int swapdir(int index,int value)
     86 {
     87     if(value==1)
     88     {
     89         int imper=0;
     90         int pernum;
     91         pernum=index>cou[2]+cou[1]?3:2;
     92 
     93 
     94         for(int i=1;i<=cou[1];i++)
     95         {
     96             if(buf[i]==1)
     97                 continue;
     98             else
     99             {
    100                 if(buf[i]==pernum)
    101                 {
    102                     swap(buf[i],buf[index]);
    103                     step++;
    104                     return 0;
    105                 }
    106                 else
    107                 {
    108                     imper=i;
    109                 }
    110 
    111             }
    112         }
    113         swap(buf[imper],buf[index]);
    114     }
    115 
    116     if(value==2)
    117     {
    118         int imper=0;
    119         int pernum;
    120         pernum=index<=cou[1]?1:3;
    121         for(int i=cou[1]+1;i<=cou[1]+cou[2];i++)
    122         {
    123             if(buf[i]==2)
    124                 continue;
    125             else
    126             {
    127                 if(buf[i]==pernum)
    128                 {
    129                     swap(buf[i],buf[index]);
    130                     step++;
    131                     return 0;
    132                 }
    133                 else
    134                 {
    135                     imper=i;
    136                 }
    137 
    138             }
    139         }
    140         swap(buf[imper],buf[index]);
    141     }
    142 
    143     if(value==3)
    144     {
    145         int imper=0;
    146         int pernum;
    147         pernum=index<=cou[1]?1:2;
    148         for(int i=cou[1]+cou[2]+1;i<=cou[1]+cou[2]+cou[3];i++)
    149         {
    150             if(buf[i]==3)
    151                 continue;
    152             else
    153             {
    154                 if(buf[i]==pernum)
    155                 {
    156                     swap(buf[i],buf[index]);
    157                     step++;
    158                     return 0;
    159                 }
    160                 else
    161                 {
    162                     imper=i;
    163     
    164                 }
    165 
    166             }
    167         }
    168         swap(buf[imper],buf[index]);
    169     }
    170     step++;
    171     return 0;
    172 }
    173 
    174 int swap(int& a,int& b)
    175 {
    176     int t=a;
    177     a=b;
    178     b=t;
    179     return 0;
    180 }
  • 相关阅读:
    Python的垃圾回收机制
    标准库
    常用数据库命令备忘录(持续增量更新)
    Springboot配置excludePathPatterns不生效问题 (2020-06-28 22:21)
    Android 子线程无法刷新UI界面
    如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)
    Android Studio 如何获取 text文本内容
    Css设置最优先
    CentOS7下MySQL服务启动失败原因及解决方法
    Js/Jquery获取input file的文件名
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3277861.html
Copyright © 2020-2023  润新知