做题记录整理枚举 P2671. [NOIP2015 普及组] 求和](2022/9/9)
这题看上边这段奇怪的话就可以发现这个恐怕是我刚考完中考的时候写的,这题大概率不是自己写的(emmm)。
这题最核心的东西就是三个点:
1.发现x+z=2y
2.根据颜色以及奇数偶数分组
3.前缀和
前面两个应该是很容易想到的,但是第三个才是最难的,这个东西当时的我肯定是想不到的现在也不一定想得到这道题的启示是:对于一些复杂度不对的做法应该尝试从数学的角度去进行优化。
//
//  main.cpp
//  cs1
//
//  Created by  on 2021/7/26.
//  Copyright © 2021 . All rights reserved.
//
#include <cmath>
#include <iostream>
#include <string>
using namespace std;
int s[1000000][10],sum[1000000][10],c[1000000],x[1000000];
int n,m,ans;
int main(){
    cin>>n>>m;
    for (int i=1;i<=n;i++)
        cin>>x[i];
    for (int i=1;i<=n;i++)
    {
        cin>>c[i];
        s[c[i]][i%2]++;
        sum[c[i]][i%2]=(sum[c[i]][i%2]+x[i])%10007;
    }
    for (int i=1;i<=n;i++)
        ans=(ans+i*((s[c[i]][i%2]-2)*x[i]%10007+sum[c[i]][i%2]))%10007;
    cout<<ans;
    return 0;
}

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号