zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    day36-20180705笔记
    day33-20180626笔记
    day31-20180612笔记
    day30-20180610笔记
    day29-20180607笔记
    day28-20180605笔记
    day26-20180531笔记
    微信开发之自定义菜单--weixin-java-tools
    几种常用的json序列化和反序列化工具介绍
    微信开发之消息接收与回复--weixin-java-tools
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3277861.html
Copyright © 2011-2022 走看看