ssl 2520 小球

这里写图片描述


分析

二重循环会TLE,所以就要思考如何优化。(研究了很久)
i < j 时,( i = j 不可能, i > j 会重复)且颜色不同
那么 a n s + = j i
一重循环时j的增加数量取决于i的个数,而i前缀和就好了。
用两个数组a和b,a[j]表示Ci为j时的下标和,b[j]表示Ci为j时的个数。然后水水地到了第一。


代码

#include <cstdio>
#include <cctype>
using namespace std;
long long ans,a[2],b[2],n;
int in(){
    int ans=0; char c=getchar();
    while (!isdigit(c)) c=getchar();
    while (isdigit(c)) ans=ans*10+c-48,c=getchar();
    return ans;
}
int main(){
    n=in();
    for (int i=1;i<=n;i++){ 
        bool x=in(); a[x]+=i; b[x]++;
        ans+=i*b[1-x]-a[1-x];
    }
    return !printf("%lld",ans);
}

猜你喜欢

转载自blog.csdn.net/sugar_free_mint/article/details/80752340
SSL