问题标题: 酷町堂:1426 求和

0
0

0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

20points:

题目很简单,就是找一个三元组,满足条件,就计算分值

code:
for(枚举x){
        for(枚举y){
            for(枚举z){
                if(满足条件){
                    ans=(ans+(x+z)*(a[x]+a[z]))%mod;
                }
            }
        }
    } 

40points:

考虑压缩状态:
观察条件可知,通过x,z可以求出y,于是可以把时间复杂度缩小至O(n^2)。

40~60points:

仍然是枚举x,z的值,但可以先分析x+z=2*y的奇偶性。因为x,y,z是整数,因此2y是2的倍数,因此x,z必然都为偶数或奇数,因此可以分奇偶性进行枚举,此时这个三元组即可不考虑y值的大小,即为当(x%2==1)枚举前面奇数序列相同的颜色进行算分数即可,算法复杂度为O(N^2/2)。

100points:

观察得分式,拆开后是x*number_x+z*number_z+x*number_z+number_x*z,可以发现可以注意到,x*number_x与z*number_z是一样的,都没有与另一个(x或z)进行任何运算,所以用前缀和维护即可

 

0
我要回答