请求加强数据
查看原帖
请求加强数据
237570
hy1089knigh楼主2021/9/28 19:56

考虑以下hack数据:

5

1 1 1 1 1

3 2 1 2

根据题意:“如果存在多个编号同时满足最优,取最小的编号。”,按理说应该输出3才对。但是我用程序测试了一下输出4,而这个程序是可以AC的。正确的程序应该是把注释语句替换为下一条语句。

#include<iostream>
using namespace std;
int a[100005];
int main()
{
	long long n,m,p1,p2,s1,s2,i;
	cin>>n;
	for(i=1;i<=n;i++)
		cin>>a[i];
	cin>>m>>p1>>s1>>s2;
	long long dragon=0,tiger=0;
	for(i=1;i<m;i++)
		dragon+=(m-i)*a[i];
	for(i=m+1;i<=n;i++)
		tiger+=(i-m)*a[i];
	if(p1>m)
		tiger+=(p1-m)*s1;
	else if(p1<m)
		dragon+=(m-p1)*s1;
	if(dragon<tiger)
	{
		p2=m-(int)((tiger-dragon)*1.0/s2+0.5);
		if(p2<1)
			p2=1;
	}
	else if(dragon==tiger)
		p2=m;
	else
	{
	/*	p2=m+(int)((dragon-tiger)*1.0/s2+0.5);*/
		if((dragon-tiger)*1.0/s2-(dragon-tiger)/s2<=0.5)
			p2=m+(dragon-tiger)/s2;
		else
			p2=m+(dragon-tiger)/s2+1;
		if(p2>n)
			p2=n;
	}
	cout<<p2<<endl;
	return 0;
}
2021/9/28 19:56
加载中...