给出一个序列 $\{a_n\}$ ,重排列这个序列使得新序列 $\{b_n\}$ 中 $b_i>a_i$ 尽量多。
这啥啊……田忌赛马?将 $\{a_n\}$ 排个序,维护四个指针 $l,r,L,R$ :
不过因为这道题没有小于扣分机制,所以 $n-$数量最多的数的数量 好像就是答案……貌似还可以其他各种贪心……
脑抽了又开了一个数组 $\{b_n\}$ 。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100000;
int n,a[maxn+5],b[maxn+5],ans;
int main(){
freopen("program.in","r",stdin);freopen("program.out","w",stdout);
scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);for (int i=1;i<=n;i++) b[i]=a[i];
for (int i=1,l=1,r=n,L=1,R=n;i<=n;i++){
if (a[l]>b[L]) {l++;L++;ans++;continue;}
if (a[r]>b[R]) {r--;R--;ans++;continue;}
l++;R--;
}
return printf("%d\n",ans),0;
}