n个取值为[1,3]的数,要求将他们按增序排序,无难度 #include<iostream> #include<fstream> #include<string> #include<memory.h> #include<cstdio> #include<cmath> #include<algorithm> #include<queue> #include<vector> using namespace std; ifstream fin("sort3.in"); ofstream fout("sort3.out"); int n; int in[1001]; int cnt[3]; int f1=0; int res=0; int main(){ int i,j; memset(cnt,0,sizeof(cnt)); fin>>n; for(i=0;i<n;i++){ fin>>in[i]; cnt[in[i]-1]++; } for(i=0;i<cnt[0];i++){ if(in[i]!=1) f1++; } res+=f1; for(i=n-1;i>=cnt[0];i--){ if(f1==0)break; if(in[i]==1){ bool flag=false; for(j=0;j<cnt[0];j++){ if(in[j]==3){ in[i]=3,in[j]=1; flag=true; break; } } if(!flag){ for(j=0;j<cnt[0];j++){ if(in[j]==2){ in[i]=2,in[j]=1; break; } } } f1--; } } /* for(i=0;i<n;i++){ fout<<in[i]<<" "; } fout<<endl; fout<<res<<endl; */ for(i=cnt[0],j=0;j<cnt[1];i++,j++){ if(in[i]!=2) { res++; } } fout<<res<<endl; return 0; }