问
  • 板块P2804 神秘数字
  • 楼主2c_s
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/6/12 21:15
  • 上次更新2023/10/23 13:15:51
查看原帖
问
583186
2c_s楼主2023/6/12 21:15

AC 100

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e5+10,mod=92084931;
int n,m,a[N],tmp[N],l,r,ans,cnt;
void msort(int le,int ri){
	if(le>=ri)return ;
	int mid=(le+ri)>>1;
	msort(le,mid);
	msort(mid+1,ri);
	l=le,r=mid+1,cnt=l;
	while(l<=mid&&r<=ri){
		if(a[l]<a[r]){
			tmp[cnt++]=a[r++];
			ans=(ans+mid-l+1)%mod;
		}
		else tmp[cnt++]=a[l++];
	}
	while(l<=mid)tmp[cnt++]=a[l++];
	while(r<=ri)tmp[cnt++]=a[r++];
	for(int i=le;i<=ri;++i)a[i]=tmp[i];
	return ;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		scanf("%d",a+i);
		a[i]+=a[i-1]-m;
	}
	msort(0,n);
	cout<<ans;
	return 0;
}

和

WA 0

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e5+10,mod=92084931;
int n,m,a[N],tmp[N],l,r,ans,cnt;
void msort(int le,int ri){
	if(le>=ri)return ;
	mid=(le+ri)>>1;
	msort(le,mid);
	msort(mid+1,ri);
	l=le,r=mid+1,cnt=l;
	while(l<=mid&&r<=ri){
		if(a[l]<a[r]){
			tmp[cnt++]=a[r++];
			ans=(ans+mid-l+1)%mod;
		}
		else tmp[cnt++]=a[l++];
	}
	while(l<=mid)tmp[cnt++]=a[l++];
	while(r<=ri)tmp[cnt++]=a[r++];
	for(int i=le;i<=ri;++i)a[i]=tmp[i];
	return ;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		scanf("%d",a+i);
		a[i]+=a[i-1]-m;
	}
	msort(0,n);
	cout<<ans;
	return 0;
}

明明只差第 8 行一点点,为什么分数差这么多?

2023/6/12 21:15
加载中...