P11231 求正确性,玄关
  • 板块灌水区
  • 楼主rpyluogu
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/11/11 14:03
  • 上次更新2024/11/11 19:12:15
查看原帖
P11231 求正确性,玄关
1049376
rpyluogu楼主2024/11/11 14:03

S考场上不知道为什么用了前缀和套二分挂成75pts了。(二分出一个数,小于它的数比大于它的数多,统计答案时可以把比它小的数加上比它大的数替换同等数量相加即被淘汰的数量)

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[100005],r[100005],b[100005],cnt,sum[100005];
signed main (){
	freopen("duel.in","r",stdin);
	freopen("duel.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(register int i=1;i<=n;i++){
    	cin>>a[i];
    	r[a[i]]++; 
	}
	for(register int i=1;i<=1e5;i++){
		if(r[i]){
			b[++cnt]=i;
		}
		sum[i]=sum[i-1]+r[i];
	}
	sort(a+1,a+n+1);
	sort(b+1,b+cnt+1);
	int pos=0,ans=0;
	for(register int i=1;i<=cnt;i++){
		ans=i;
		pos=upper_bound(a+1,a+n+1,b[i])-a-1;
		if(sum[a[pos]]>sum[a[n]]-sum[a[pos-1]]){
			break;
		}
	}
	cout<<n-(sum[b[ans-1]]+sum[b[cnt]]-sum[b[ans]])<<'\n';
	return 0;
}
//10
//136 136 136 2417 136 136 2417 136 136 136

赛后发现正解是统计众数个数,wssb

但还是想知道是打法问题还是思路问题。

2024/11/11 14:03
加载中...