zoukankan      html  css  js  c++  java
  • P1-2017级第一次算法上机 C 芸茹的入学测试

    题目描述

    芸如是一位天才科学家,为中国阵营效力。她有着出众的才智,在几年的军旅生活中,芸如研制了许多高科技武器,使得中国军队的武备可以与厄普西隆阵营狡猾的研究成果相抗衡,甚至还可以和整个盟军部队分庭抗礼。

    芸如很小的时候就已经开始展现自己的才华,并作为最优秀的幼儿被送往保密培训学校。在她入校的第一天,校长决定亲自考一考这位被外界奉为"天才"的小姑娘。

    校长的问题是这样的:

    在一个长度为N的数字序列A,有Q组询问,每组询问给定lrlr,请求出A[l]+A[l+1]+...+A[r]的值。

    由于这个结果可能很大,最终的结果要对10007取模(即取余数)。

    输入

    多组数据输入,数据组数不超过10

    第一行是一个数字NQ,表示序列A中元素的个数和询问组数。(0<NQ≤1e6

    第二行是N个整数,第i个整数A[i]表示序列A中的第i个元素,保证均为非负整数,且在INT范围内。

    接下来Q行,每行是两个用空格分隔的整数lr(保证lr不会超出序列A下标的范围,且lr)。

    注意序列A的下标从1开始。

    输出

    对于每组数据,每个询问输出一行,为和值。

    输入样例

    3 1

    1 2 3

    1 2

    输出样例

    3

    特别说明

    20%的数据,N,Q≤100

    数据量较大,读入请勿用过慢读入方式。该类提示以后上机将不再出现,请大家多总结相关经验

    思路

      本题需要用到前缀和的想法。不知道前缀和的同学请自行百度。

      本题为一个很简单的多次查询区间和问题,只要利用前缀和数组,在读入数据的时候利用一个sum数组对数字累次进行加和,在查询对应区间的和值的时候,进行sum数组的相减就可以了。

      本题需要特别注意的是取模问题。今后取模都请使用形如"(a+mod)%mod"的形式来代替"a%mod"。

    参考代码 

     1 #include<stdio.h>
     2 #define MAXN 1000002
     3 #define Mod 10007
     4 int a[MAXN];
     5 int main()
     6 {
     7     int N,Q;//N:元素个数;Q:询问组数
     8     while(scanf("%d%d",&N,&Q) != EOF){
     9         int i;
    10         //输入+前缀和数组预处理
    11         a[0] = 0;
    12         for(i = 1;i <= N;i++){
    13             int tmp;
    14             scanf("%d",&tmp);
    15             tmp %= Mod;
    16             a[i] = (tmp + a[i-1])%Mod;
    17         }
    18         //读入查询范围
    19         for(i = 0;i < Q;i++){
    20             int l,r;
    21             scanf("%d%d",&l,&r);
    22             printf("%d
    ",(a[r]-a[l-1]+Mod)%Mod);
    23         }
    24     }
    25 }
  • 相关阅读:
    构建之法第二次作业
    wav音频的剪切
    构建之法结对编程
    模拟数据库事务实现转账
    Quirks模式是什么?它和Standards模式有什么区别
    CSS都有哪些选择器?
    简述渐进增强和优雅降级之间的不同?
    市面上浏览器的内核分别是什么?有哪些?
    html与xhtml有什么区别?
    关于对WEB标准以及W3C的理解与认识问题
  • 原文地址:https://www.cnblogs.com/zjsyzmx0527/p/10162189.html
Copyright © 2011-2022 走看看