以前看过题解A了,过了一段时间自己打一遍80pts,感觉好像差不多
查看原帖
以前看过题解A了,过了一段时间自己打一遍80pts,感觉好像差不多
495599
CSZD楼主2022/10/17 18:55

这是我的80分代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long c[100010];
int main()
{
	long long n,min;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>c[i];
	int m,p1,s1,p2,s2;
	cin>>m>>p1>>s1>>s2;
	c[p1]+=s1;
	long long lf=0,hf=0;
	for(int i=1;i<m;i++)
		lf+=c[i]*(m-i);
	for(int i=m+1;i<=n;i++)
		hf+=c[i]*(i-m);
	min=abs(hf-lf);
	p2=m;
	if(lf<hf)
	{
		for(int i=1;i<m;i++)
		{
			long long a=abs(hf-(lf+s2*(m-i)));
			if(a<min)
			{
				min=a;
				p2=i;
			}
		}
	}
	if(lf>hf)
	{
	    for(int i=m+1;i<=n;i++)
		{
			long long a=abs((hf+(s2*(i-m)))-lf);
			if(a<min)
			{
				min=a;
				p2=i;
			}
		}
	}
	cout<<p2<<endl;
	return 0;
}

这是我的AC代码(以前)

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long a[112345];
int main()
{
  
    long long n;
    long long m,p1,s1,s2,p2;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    cin>>m>>p1>>s1>>s2;
    a[p1]+=s1;
    long long lo=0,hu=0;
    for(int i=1;i<=n;i++)
    {
    	if(i<m)lo+=a[i]*(m-i);
    	else if(i>m)hu+=a[i]*(i-m);
	}
	p2=m;
	long long cha=abs(lo-hu);
	for(int i=1;i<=n;i++)
	{
		if(i<m)
		{
			long long k=abs((lo+s2*(m-i))-hu);
			if(k<cha)
			{
				cha=k;
				p2=i;
			}
		}
		if(i>m)
		{
			long long k=abs((hu+s2*(i-m))-lo);
			if(k<cha)
			{
				cha=k;
				p2=i;
			}
		}
	}
	cout<<p2<<endl;
	return 0;
}

QwQ

2022/10/17 18:55
加载中...