zoukankan      html  css  js  c++  java
  • NOIP2015pj求和

    题目描述

    一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n。每个格子上都染了一种颜色color_i用[1,m]当中的一个整数表示),并且写了一个数字number_i。

    定义一种特殊的三元组:(x,y,z),其中x,y,z都代表纸带上格子的编号,这里的三元

    组要求满足以下两个条件:

    1.xyz是整数,x<y<z,y-x=z-y

    2.colorx=colorz

    满足上述条件的三元组的分数规定为(x+z)*(number_x+number_z。整个纸带的分数

    规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以10,007所得的余数即可。

    -------------------------------------------------------------------------------------------------------------------

    需要一点数学推导,对于一种颜色,就是sigma奇*sigma num奇+sigma偶*sigma num偶+奇*num*(cnt奇-2)+偶*num*(cnt偶-2)

    预处理sum和cnt数组,然后扫一遍统计答案行了

    WARN:一定多%%%%%%%%%%%%

    #include <iostream>
    #include <cstdio>
    using namespace std;
    const int N=1e5+5,MOD=10007;
    inline int read(){
        char c=getchar(); int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    int n,m,ans=0;
    int col[N],num[N],sum[2][N],cnt[2][N];
    int main(int argc, const char * argv[]) {
        n=read();m=read();
        for(int i=1;i<=n;i++) num[i]=read()%MOD;
        for(int i=1;i<=n;i++){
            col[i]=read();
            sum[i%2][col[i]]=(sum[i%2][col[i]]+num[i])%MOD;
            cnt[i%2][col[i]]++;
        }
        for(int i=1;i<=n;i++){
    //        ans=(ans+(i%MOD*sum[i%2][col[i]])%MOD+(i%MOD*num[i]*(cnt[i%2][col[i]]-2)+MOD)%MOD)%MOD;
            ans=(ans+i%10007*((sum[i%2][col[i]]+(cnt[i%2][col[i]]-2)%10007*num[i]+10007)%10007))%10007;
        }
        cout<<ans;
        return 0;
    }

     

  • 相关阅读:
    011 处理模型数据时@ModelAttribute的使用
    动态产生DataSource------待整理
    连接池问题
    maven加载第三方jar不能加载
    010 处理模型数据(ModelAndView,Map Model,@SessionAttributes)
    009 使用servlet API作为参数
    008 使用POJO对象绑定请求参数
    007 @CookieValue绑定请求中的cookie
    006 请求处理方法签名
    005 RequestMapping_HiddenHttpMethodFilter 过滤器
  • 原文地址:https://www.cnblogs.com/candy99/p/5792983.html
Copyright © 2011-2022 走看看