lzhh_lzhh26 • 1个月前
using namespace std; int main(){
int n;
cin>>n;
long long a[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];
}
int m,s1,p1,s2;
cin>>m>>p1>>s1>>s2;
a[p1]+=s1;
int l=0,r=0;//m左、右的气势值
for(int i=1;i<m;i++){
l+=a[i]*abs(i-m);
}
for(int i=m+1;i<=n;i++){
r+=a[i]*abs(i-m);
}
// cout<<l<<' '<<r<<endl; int min=0x3f3f3f3f; int p2; if(l==r||abs(r-l)<s2){ cout<<m<<endl; return 0; }else if(l<r){//放在左侧 for(p2=m-1;p2>=1;p2--){
l+=(m-p2)*s2;
if(abs(r-l)<min){
min=p2;
}
l-=(m-p2)*s2;
}
cout<<min<<endl;
return 0;
}else{
int p2;
for(p2=m+1;p2<=n;p2++){
l+=(p2-m)*s2;
if(abs(r-l)<min){
min=p2;
}
l-=p2-m*s2;
}
cout<<min<<endl;
return 0;
}
return 0;
}
评论:
using namespace std; int main(){
int n;
cin>>n;
long long a[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];
}
int m,s1,p1,s2;
cin>>m>>p1>>s1>>s2;
a[p1]+=s1;
int l=0,r=0;//m左、右的气势值
for(int i=1;i<m;i++){
l+=a[i]*abs(i-m);
}
for(int i=m+1;i<=n;i++){
r+=a[i]*abs(i-m);
}
// cout<<l<<' '<<r<<endl; int min=0x3f3f3f3f,minp=n; int p2; if(l==r||abs(r-l)<s2){ cout<<m<<endl; return 0; }else if(l<r){//放在左侧 for(p2=m-1;p2>=1;p2--){
l+=(m-p2)*s2;
if(abs(r-l)<min){
min=abs(r-l);
minp=p2;
}
l-=(m-p2)*s2;
}
cout<<minp<<endl;
return 0;
}else{
int p2;
for(p2=m+1;p2<=n;p2++){
l+=(p2-m)*s2;
if(abs(r-l)<min){
min=abs(r-l);
minp=p2;
}
l-=p2-m*s2;
}
cout<<minp<<endl;
return 0;
}
return 0;
} / 3 1 1 1 2 1 58 56 /
请先登录,才能进行评论