考虑以下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;
}