社区讨论

归并排序没输出,怎么办啊

P1309[NOIP 2011 普及组] 瑞士轮参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m42p3ohg
此快照首次捕获于
2024/11/29 20:03
去年
此快照最后确认于
2025/11/04 13:39
4 个月前
查看原帖
麻烦大佬帮忙看看这里的归并排序( 函数 void guibing() )有什么问题
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e5; 
int n,r,q,m;
inline void read(int& a)
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=s*10+ch-'0';
		ch=getchar();
	}
	a=w*s;
}
struct app{
	int s,w,id;
}a[N*2],b[N+N];
bool cmp(app a,app b)
{
	if(a.s==b.s)
	return a.id<b.id;
	return a.s>b.s;
} 

void guibing(int l,int r)
{
	int mid=(r-l)>>1+l;
	guibing(l,mid);
	guibing(mid+1,r);
	int p=0,i=l,j=mid+1; 
	while(i<=mid&&j<=r)
	{
		if(a[i].s>a[j].s)
		{
			b[p++]=a[i++];
		}
		else
		b[p++]=a[j++];
	}
	while(i<=mid)b[p++]=a[i++];
	while(j<=r)b[p++]=a[j++];
	for(int i=l,j=0;i<=r;i++,j++)
	a[i]=b[j];
}

int main()
{
	scanf("%d%d%d",&n,&r,&q);
	for(int i=1;i<=n*2;i++)
	{
		read(a[i].s);
		a[i].id=i;
	}
	for(int i=1;i<=n+n;i++)
	{
		read(a[i].w);
	} 
	sort(a+1,a+1+n+n,cmp);
	while(r>0)
	{
		for(int i=1;i<=n*2;i+=2)
	    {
		    if(a[i].w>a[i+1].w)
    		a[i].s++;
	    	else
	    	a[i+1].s++;
	    }
	    r--;
	    guibing(1,n+n);
	}
	printf("%d",a[q].id);
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...