• [NOIP2015PJ] 洛谷 P2671 求和


    思路分析

    直接暴力肯定是不行的,我们需要把各种相同的颜色分离出来计算。

    但是只分离出来没有用,因为三元组要求中间有一个y。可以看出,x和z的奇偶性相同时,存在y使三元组成立。

    所以我们用两个数组存储相同颜色的奇、偶情况,每次计算就变成计算这个序列的值。

    则原式=(num[1]+num[2])*(a[num[1]]+a[num[2])+(num[1]+num[3])*(a[num[1]]+a[num[3])+(num[1]+num[4])*(a[num[1]]+a[num[4])+

        ...+(num[2]+num[3])*(a[num[2]]+a[num[3])+(num[2]+num[4])*(a[num[2]]+a[num[4])+

        ...+(num[n-1]+num[n])*(a[num[n-1]]+a[num[n])

    其中,num[1]*a[num[1]]这个值被计算了n-1次,num[1]乘其他a[num[2]],a[num[3]],a[num[4]]……都为一次。

       num[2]*a[num[2]]这个值被计算了n-2次,num[1]乘其他a[num[1]],a[num[3]],a[num[4]]……都为一次。

    以此类推。

    代码

    #include<iostream>
    #include<vector>
    #include<cmath>
    
    using namespace std;
    
    long long n,m,a[100001],ans=0;
    //数据比较大,用longlong
    vector<long long> even[100001],odd[100001];
    //使用变长数组存储
    
    int ad(int pt)
    {
        
        long long count=0,ep=even[pt].size(),op=odd[pt].size(),s=0;
        for(int i=1;i<=ep;i++)
        {
            s=(s+a[even[pt][i-1]])%10007;//所有值的总和
        }
        for(int i=1;i<=ep;i++)
        {
            count+=(s%10007+(ep-2)*(a[even[pt][i-1]]%10007))%10007*even[pt][i-1]%10007;
            count%=10007;
    //一定要边/边%!
        }
        
        s=0;
        for(int i=1;i<=op;i++)
        {
            s=(s+a[odd[pt][i-1]])%10007;
        }
        for(int i=1;i<=op;i++)
        {
            count+=(s%10007+(op-2)*(a[odd[pt][i-1]]%10007))%10007*odd[pt][i-1]%10007;
            count%=10007;
        }
    
        return count;
    }
    
    int main()
    {
        long long cl;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        for(int i=1;i<=n;i++)
        {
            cin>>cl;
            if(i&1)
                odd[cl].push_back(i);
            else
                even[cl].push_back(i);
        }
        for(int i=1;i<=m;i++)
        {
            ans+=ad(i);
            ans%=10007;
        }
        cout<<ans;
    }
  • 相关阅读:
    halcon 如何把一个region截取出来保存为图像
    Halcon学习(三)赋值与数组操作
    sort_region——对区域进行排序
    Halcon函数【转】
    Halcon算子之shape_trans,用于变换区域的形状
    Halcon学习之八:图像区域叠加与绘制
    Halcon学习之七:改变图像的现实方式和大小
    Halcon学习之六:获取Image图像中Region区域的特征参数
    Halcon学习之五:有关图像的定义域的函数
    Docker Swarm redis 集群搭建
  • 原文地址:https://www.cnblogs.com/ehznehc/p/9900348.html
Copyright © 2020-2023  润新知