usaco Sorting a Three-Valued Sequence 三值的排序

来源:互联网 发布:传奇盛世天命法神数据 编辑:程序博客网 时间:2024/06/06 08:58

一开始想贪心,但是一想这是搜索章节应该用bfs?(为什么这么想看我上一个usaco的题目),,,,,,,,,,结果我贪心做出来了。然后我百度一下了别人做的好像么没人用bfs我不知道可不可以做出来。

思路就是只有三个数肯定是按照123的顺序排的当然可能三个不是同是存在比如只有12等等。

/*ID: jinbo wuLANG: C++TASK: sort3*/#include<bits/stdc++.h>using namespace std;int a[1000];int b[1000];int v[4];int v1[4];int main(){int n;freopen("sort3.in","r",stdin);freopen("sort3.out","w",stdout);int sum=0,cnt=0,cnt1=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);b[i]=a[i];//把a数组排序当做标准 v[a[i]]++;    }    sort(a,a+n);    int l=v[1]+v[2];//计算整个数组中1和2的个数 for(int i=0;i<l;i++){   if(b[i]==1)   v1[1]++;//前l个中1的个数    else if(b[i]==2)   v1[2]++;//前l个中2的个数    else sum++;}//在前l中本来应该都是12如果有3肯定要换则换的次数需要加一v1[1]=v[1]-v1[1];v1[2]=v[2]-v1[2];for(int i=0;i<l;i++)//把前l个中3换成1和2,先把1的个数换够再换2 {if(b[i]==3&&v1[1]){ b[i]=1;v1[1]--;    }    else if(b[i]==3)    b[i]=2;}for(int i=0;i<l;i++)//把前l个位置不对的1换成2就行了。所有1的位置对2的位置也就对了 {if(b[i]==1&&b[i]!=a[i])sum++;}printf("%d\n",sum);}



0 0
原创粉丝点击