为何会re#1#6
查看原帖
为何会re#1#6
672223
szlh_yanlikun楼主2023/9/30 00:40
#include<bits/stdc++.h>
#define int long long
#define p 1000000009
using namespace std;
int n,k,a[100005];
int ans=1,flag=1;
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	sort(a+1,a+n+1);
	if(n%2==1)
	{
		ans=a[n];
		n--;
		k--;
		if(ans<0)
			flag=-1;
	}
	int front=1,tail=n;
	while(k!=0)
	{
		int x=a[front]*a[front+1],y=a[tail]*a[tail-1];
		if(x*flag>y*flag)
		{
			ans=x%p*ans%p;
			front+=2;
		}
		else
		{
			ans=y%p*ans%p;
			tail-=2;
		}
		k-=2;
	}
	cout<<ans;
	return 0;
}

已A,但不理解为什么以上这份代码会re。

#include<bits/stdc++.h>
#define int long long
#define p 1000000009
using namespace std;
int n,k,a[100005],ans,flag;
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	sort(a+1,a+n+1);
	ans=k&1?a[n]:1;
	n-=k&1;
	k-=k&1;
	int l=1,r=n;
	flag=ans<0?-1:1;
	while(k!=0)
	{
		int x=a[l]*a[l+1],y=a[r]*a[r-1];
		if(x*flag>y*flag)
		{
			ans=x%p*ans%p;
			l+=2;
		}
		else
		{
			ans=y%p*ans%p;
			r-=2;
		}
		k-=2;
	}
	cout<<ans;
	return 0;
}

而这么写却AC,求大佬解惑

2023/9/30 00:40
加载中...