首页 > 其他分享 >【NOIP2015普及组复赛】题3:求和

【NOIP2015普及组复赛】题3:求和

时间:2024-05-27 09:04:07浏览次数:23  
标签:10 NOIP2015 求和 纸带 number int 100000 ans 复赛

题3:求和

【题目描述】

一条狭长的纸带被均匀划分出了 n n n 个格子,格子编号从 1 1 1 到 n n n。每个格子上都染了一种颜色 c o l o r i color_i colori​ (用 [ 1 , m ] [1,m] [1,m]当中的一个整数表示),并且写了一个数字 n u m b e r i number_i numberi​。
在这里插入图片描述

定义一种特殊的三元组: ( x , y , z ) (x,y,z) (x,y,z),其中 x , y , z x,y,z x,y,z 都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:

  1. x y z xyz xyz 是整数, x < y < z , y − x = z − y x<y<z,y−x=z−y x<y<z,y−x=z−y
  2. c o l o r x = c o l o r z color_x=color_z colorx​=colorz​
    满足上述条件的三元组的分数规定为 ( x + z ) × ( n u m b e r x + n u m b e r z ) (x+z)×(number_x+number_z) (x+z)×(numberx​+numberz​) 。整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以 10 , 007 10,007 10,007 所得的余数即可。

【输入】

第一行是用一个空格隔开的两个正整数 n n n 和 m , n m,n m,n 表纸带上格子的个数, m m m 表纸带上颜色的种类数。

第二行有 n n n 用空格隔开的正整数,第 i i i 数字 n u m b e r number number 表纸带上编号为 i i i 格子上面写的数字。

第三行有 n n n 用空格隔开的正整数,第 i i i 数字 c o l o r color color 表纸带上编号为 i i i 格子染的颜色。

【输出】

共一行,一个整数,表示所求的纸带分数除以 10 , 007 10,007 10,007 所得的余数。

【输入样例1】

6 2
5 5 3 2 2 2
2 2 1 1 2 1

【输出样例1】

82

【输入样例2】

15 4
5 10 8 2 2 2 9 9 7 7 5 6 4 2 4
2 2 3 3 4 3 3 2 4 4 4 4 1 1 1

【输出样例2】

1388

【样例1说明】

纸带如题目描述中的图所示。

所有满足条件的三元组为: ( 1 , 3 , 5 ) , ( 4 , 5 , 6 ) (1,3,5),(4,5,6) (1,3,5),(4,5,6)。

所以纸带的分数为 ( 1 + 5 ) × ( 5 + 2 ) + ( 4 + 6 ) × ( 2 + 2 ) = 42 + 40 = 82 (1+5)×(5+2)+(4+6)×(2+2)=42+40=82 (1+5)×(5+2)+(4+6)×(2+2)=42+40=82 。

【数据规模】

对于第 1 1 1 组至第 2 2 2 组数据, 1 ≤ n ≤ 100 , 1 ≤ m ≤ 5 1≤n≤100,1≤m≤5 1≤n≤100,1≤m≤5;

对于第 3 3 3组至第 4 4 4 组数据, 1 ≤ n ≤ 3000 , 1 ≤ m ≤ 100 1≤n≤3000,1≤m≤100 1≤n≤3000,1≤m≤100;

对于第 5 5 5 组至第 6 6 6 组数据, 1 ≤ n ≤ 100000 , 1 ≤ m ≤ 100000 1≤n≤100000,1≤m≤100000 1≤n≤100000,1≤m≤100000,且不存在出现次数超过 20 20 20 的颜色;

对于全部 10 10 10 组数据, 1 ≤ n ≤ 100000 , 1 ≤ m ≤ 100000 , 1 ≤ c o l o r i ≤ m , 1 ≤ n u m b e r i ≤ 100000 1≤n≤100000,1≤m≤100000,1≤colori≤m,1≤numberi≤100000 1≤n≤100000,1≤m≤100000,1≤colori≤m,1≤numberi≤100000。

【代码如下】:

#include<bits/stdc++.h>
using namespace std;
//ifstream cin("sum.in");
//ofstream cout("sum.ans");
const int mn=100000;
const int mm=100000;
const int p=10007;
int n,m,ans;
int number[mn+1],colour[mn+1];
int s[2][mm+1][4];

void init(){
    cin >> n >> m;
    for(int i=1;i<=n;i++){
    	cin >> number[i];
	}
    for(int i=1;i<=n;i++){
    	cin >> colour[i];
	}
}
void solve(){
    for(int i=1;i<=n;i++){
        int z=i%p,numz=number[i]%p,c=colour[i],t=i%2;
        int count=s[t][c][0]%=p,x=s[t][c][1]%=p,
numx=s[t][c][2]%=p,x_numx=s[t][c][3]%=p;
        ans=(ans+((count*z)%p*numz)%p)%p;
        ans=(ans+x_numx)%p;
        ans=(ans+x*numz)%p;
        ans=(ans+z*numx)%p;
        s[t][c][0]++;
        s[t][c][1]+=z;
        s[t][c][2]+=numz;
        s[t][c][3]+=z*numz;
    }
}
void output(){
    cout << ans;
    //fclose(stdin);
    //fclose(stdout);
}
int main(){
    init();
    solve();
    output();
    return 0;
}

标签:10,NOIP2015,求和,纸带,number,int,100000,ans,复赛
From: https://blog.csdn.net/lpstudio/article/details/139225162

相关文章

  • 【NOIP2015普及组复赛】题4:推销员
    题4:推销员【题目描述】阿明是一名推销员,他奉命到螺丝街推销他们公司的产品。螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户。螺丝街一共有NNN家......
  • CSP历年复赛题-P1095 [NOIP2007 普及组] 守望者的逃离
    原题链接:https://www.luogu.com.cn/problem/P1095题意解读:在有限的时间内,通过跑步或者闪烁两种方式,能跑出的最远距离是多少,以及是否能跑出出口。解题思路:1、贪心法每一秒钟,都有两种选择:跑步(17米)、闪烁(60米,前提是蓝够10点,否则等待1s恢复4点蓝)经过计算,恢复足够的蓝到闪烁需要3.......
  • 《行求和》
    描述有一个n行m列的二维数组,请你求出二维数组的每一行内所有数字的和是多少。输入描述第一行两个整数n和m,代表下面输入的是n行m列(2≤n,m≤10)的二维数组;接下来n行,每行m列,表示二维数组的每个元素各是多少。输出描述共有n行,第i行表示二维数组第i行所有数字的和是多少。......
  • 数据库函数下拉式求和
    问题:如何用Dsum实现单条件求和的下拉函数解决:=DSUM($C$1:$E$9,D$1,$K$1:$K2)-SUM(L$1:L1)Dsum公式在第2行实现的是股票名称为A的求和结果;到第3行时变成股票名称为A和B的求和结果,这时需要减掉上一个单元格的数据;到第4行则需要减掉上两个单元格求和的数据。使用Sum(L$1:L1)......
  • 隔列求和
     问题:隔列求和(多条件求和)函数公式解决:多条件求和套路: =SUM(($B$3:$I$3=$K12)*($B$4:$I$4=L$11)*($A$5:$A$18=L$10)*$B$5:$I$18)SumIfs套路: =SUMIFS(OFFSET($B$4:$I$4,MATCH(L$4,$A$5:$A$18,),),$B$3:$I$3,$K6,$B$4:$I$4,L$5)多条件求和套路:=Sum((条件区域1=条件1)*(条......
  • 【NOIP2014普及组复赛】题4:子矩阵
    题3:子矩阵【题目描述】给出如下定义:1.子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。例如,下面左图中选取第2、......
  • 【NOIP2014普及组复赛】题3:螺旋矩阵
    题3:螺旋矩阵【题目描述】一个nnn行nnn列的螺旋矩阵可由如下方......
  • CSP历年复赛题-P1094 [NOIP2007 普及组] 纪念品分组
    原题链接:https://www.luogu.com.cn/problem/P1094题意解读:贪心选择解题思路:贪心策略:将纪念品按价格由小到大排序,优先一大、一小,如果价格之和不超限,则分为一组,如果超限,则大的单独分为一组,重复以上过程,直到所有数据都遍历到,采用一头一尾双指针即可。证明:如果最大价格不是和最......
  • 【C++】牛客——OR64 求和
    ✨题目链接:OR64求和✨题目描述 输入两个整数n和m,从数列1,2,3.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来✨输入描述:每个测试输入包含2个整数,n和m✨输出描述: 按每个组合的字典序排列输出,每行输出一种组合 ✨示例1......
  • CSP历年复赛题-P1061 [NOIP2006 普及组] Jam 的计数法
    原题链接:https://www.luogu.com.cn/problem/P1061题意解读:从编号s~t的字母从挑w个,组成一种特殊的数字,数字里字母都是升序的,给定初始数字,要计算后5个。解题思路:1、模拟法模拟样例:2105有效字母范围:b,c,d,e,f,g,h,i,j 初始值:bdfij要计算bdfij的下一个,采取如下步骤......