栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

K倍区间(c++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

K倍区间(c++)

一.问题描述
  给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?
        输入格式:第一行包含两个整数N和K。(1 <= N, K <= 100000),以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)
        输出格式:输出一个整数,代表K倍区间的数目。

二.出现的问题

        1.审题

        倍数而不是固定的数,所以不能用二分法固定区间然后向右平移依次查找。

三.问题分析

        可以硬计算前几项和,然后看余数,如果当前余数与之前出现过的余数相等,那么中间的差项区间一定是倍数区间。比如,1-5之和求余是1,1-10之和求余也是1,那么6-10之和一定是倍数。

四.代码展示(不知道为什么仍无法提交,还是报错答案错误,但编译器上完美运行)

        有了上面分析,代码就简单多了。

#include
using namespace std;
int main()
{
    int sum=0;
    int N,K;
    cin>>N>>K;
    int *number=new int[N+1];
    int *table=new int[K];
    for(int i=0;i>number[i];
        number[i]+=number[i-1];
        sum+=table[number[i]%K];
        table[number[i]%K]++;
    }
    cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号