A
只要两个数不一样就需要移动,发现如果要全改为众数的话,无论众数是最大值还是最小值都不如直接默认改为中位数最优。
#include<iostream>
#include<queue>
#include<deque>
#include<bitset>
#include<string>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<set>
#include<map>
#include<ctime>
#include<random>
#include<vector>
#include<utility>
#define f(i,a,b) for(ll i=a;i<=b;i++)
using ll = long long;
using db = double;
ll rd(){ll x=0,w=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){w=-1;}c=getchar();}while('0'<=c&&c<='9'){x=x*10+(c-'0');c=getchar();}return x*w;}
using namespace std;
const ll MX =2e5+7;
const ll mod = 998244353;
mt19937 mrd(time(0));
namespace Wunsch{
ll n,T,k,m,ans,cnt,nm;
ll a[MX];
void work(){
n=rd();
f(i,1,n)a[i]=rd();
sort(a+1,a+1+n);
f(i,1,(n>>1)){
if(a[i]!=a[n-i+1])cnt++;
}
cout<<cnt<<"\n";
cnt=0;
return ;
}
bool main(){
T=rd();
// T=1;
while(T--)work();
return 1;
}
}
bool amiya=Wunsch::main();
int main(){;}
B
发现每个数只对其后面有影响,也就是说答案数列是单调不增的,只需要判断每次加进来的数是否会让答案变小即可。
#include<iostream>
#include<queue>
#include<deque>
#include<bitset>
#include<string>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<set>
#include<map>
#include<ctime>
#include<random>
#include<vector>
#include<utility>
#define f(i,a,b) for(ll i=a;i<=b;i++)
using ll = long long;
using db = double;
ll rd(){ll x=0,w=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){w=-1;}c=getchar();}while('0'<=c&&c<='9'){x=x*10+(c-'0');c=getchar();}return x*w;}
using namespace std;
const ll MX =2e5+7;
const ll mod = 998244353;
mt19937 mrd(time(0));
namespace Wunsch{
ll n,T,k,m,ans,cnt,nm;
ll a[MX];
void work(){
n=rd();
ans=1e9+7;
f(i,1,n){
a[i]=rd();
cnt+=a[i];
ans=min(ans,cnt/i);
cout<<ans<<" ";
}
cout<<"\n";
cnt=0;
return ;
}
bool main(){
T=rd();
// T=1;
while(T--)work();
return 1;
}
}
bool amiya=Wunsch::main();
int main(){;}
