(玄关)两份代码,均为80分(一份TLE,一份WA)
查看原帖
(玄关)两份代码,均为80分(一份TLE,一份WA)
1122172
lelaimc楼主2024/10/2 17:17

第一份,TLE

#include<bits/stdc++.h>
using namespace std;
long long w[100005],s1,s2;
int n,m,p1;
struct node{
    int cha,hao;
}ans[100005];
long long lf(int m){
    int sum=0;
    for(int i=1;i<=m-1;i++) sum+=w[i]*(m-i);
    return sum;
}
long long rf(int m){
    int sum=0;
    for(int i=m+1;i<=n;i++) sum+=w[i]*(i-m);
    return sum;
}
bool cmp(node x,node y){
    if(x.cha!=y.cha) return x.cha<y.cha;
    else return x.hao<y.hao;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>w[i];
    cin>>m>>p1>>s1>>s2;
    w[p1]+=s1;
    for(int i=1;i<=n;i++)
    {
        w[i]+=s2;
        ans[i].cha=abs(lf(m)-rf(m));
        ans[i].hao=i;
        w[i]=w[i]-s2;
    }
    sort(ans+1,ans+n+1,cmp);
    cout<<ans[1].hao;
    return 0;
}

第二份,WA

#include<bits/stdc++.h>
using namespace std;
long long w[100005],s1,s2,n,m,p1,amin,sum1,sum2,hao,t;
long long lf(long long m){
    int sum=0;
    for(int i=1;i<=m-1;i++) sum+=w[i]*(m-i);
    return sum;
}
long long rf(long long m){
    int sum=0;
    for(int i=m+1;i<=n;i++) sum+=w[i]*(i-m);
    return sum;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>w[i];
    cin>>m>>p1>>s1>>s2;
    hao=m;
    w[p1]+=s1;
    sum1=lf(m);
    sum2=rf(m);
    amin=abs(sum1-sum2);
    for(int i=1;i<=n;i++)
    {
        if(i<m)
        {
        	sum1+=s2*(m-i);
        	t=abs(sum1-sum2);
        	sum1=sum1-s2*(m-i);
		}
        else
		{
        	sum2+=s2*(i-m);
        	t=abs(sum1-sum2);
        	sum2=sum2-s2*(i-m);
		}
        if(t<amin)
        {
        	amin=t;
        	hao=i;
		}
		
    }
    cout<<hao;
    return 0;
}
2024/10/2 17:17
加载中...