1058: Lucky Sequence

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 52  Solved: 6
[Submit][Status][Web
Board
]

Description

Edward  得到了一个长度为  N  的整数序列,他想找出这里面有多少个“幸运的”
连续子序列。一个连续子序列被称为“幸运的”,当且仅当该子序列内的整数之
和恰好是  K  的整数倍数。他请求你写一个程序来计算他喜欢的连续子序列个数.

Input

输入第一行是一个整数  T,表示有  T  组数据。
每组数据第一行是两个整数  N (1 <= N <= 10^6), K (1 <= K <= 10^9)。
接下来的一行包含  N  个整数  Ai (|Ai| <= 10^9)。

Output

对于每组测试数据,输出一行仅包含一个整数,表示  Edward  喜欢的连续子序
列数量。

Sample Input

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

Sample Output

4
9

刚开始也不会,问了学长、大神,说用map+枚举一个端点值,想了一个早上得出一个计算公式

设Sum[x]为下标1~x的元素和,那么Sum[I~r]=Sum[r]-Sum[l-1];例如Sum[3~6]=Sum[6]-Sum[2](Sum[3-1])。然后题目要求的是Sum[q~p]%k==0,把前面拆掉变成( Sum[p] - Sum[q-1] )%k==0,再拆开移项,得到Sum[p]%k==Sum[q-1] %k;

1、若取模数不为0,则需要找一个一样的来形成上述等式,因此sum_cnt=(second+second-1)÷2;

2、若取模数为0,则除了1的条件,自身对K取模也是0也要算进去,因此为(second+second-1)÷2+second=(second+second+1)÷2(这条没用到,因为后面直接加回来就可以了)

为了不每次都%k,用map记录时直接把first改为%k之后的结果,这题一个坑点就是负数的问题,例如4%3==1,-5%3==1,而不是-2或者2,因此要用(x%k+k)%k这个公式来将负数取模转换成对应的题目所要求的正数。而不是简单的abs或fabs(为此WA了好几次)。还有数据都用long long,全为int也是WA。

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
int main (void)
{
int t,i,n;
LL temp,ans,k,tsum,q;
scanf("%d",&t);
while (t--)
{
map<LL,LL>mist;//记录某一个取模结果对应的出现次数
scanf("%d%lld",&n,&k);
tsum=0;
ans=0;
mist[0]=0;
for (i=1; i<=n; i++)
{
scanf("%lld",&temp);
tsum+=temp;
mist[(tsum%k+k)%k]++;
}
map<LL,LL>::iterator it;
for (it=mist.begin(); it!=mist.end(); it++)
{
k=it->second;
ans=ans+(k*(k-1))/2;
}
ans=ans+mist[0];
printf("%lld\n",ans);
}
return 0;
}

ACM程序设计选修课——1058: Lucky Sequence(思考)的更多相关文章

  1. ACM程序设计选修课——1051: Glamor Sequence(YY+求和公式)

    1051: Glamor Sequence Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 16  Solved: 5 [Submit][Status] ...

  2. ACM程序设计选修课——1018: Common Subsequence(DP)

    问题 L: Common Subsequence 时间限制: 1 Sec  内存限制: 32 MB 提交: 70  解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...

  3. ACM程序设计选修课——1043: Radical loves integer sequences(YY)

    1043: Radical loves integer sequences Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 36  Solved: 4 ...

  4. ACM程序设计选修课——1031: Hungar的得分问题(二)(杨辉三角+二进制转换)

    1031: Hungar的得分问题(二) 时间限制: 1 Sec  内存限制: 64 MB 提交: 15  解决: 10 [提交][状态][讨论版] 题目描述 距离正式选秀时间越来越近了,今天Hung ...

  5. ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)

    问题 E: (ds:图)公路村村通 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...

  6. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  7. ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)

    Problem D: (ds:树)合并果子 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 80  Solved: 4 [Submit][Status][ ...

  9. ACM程序设计选修课——1076汇编语言(重定向+模拟)

    1076: 汇编语言 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 34  Solved: 4 [Submit][Status][Web Board] ...

随机推荐

  1. 在浏览器里使用SAPGUI

    事务码SICF,service name输入WEBGUI, 点右键,选择Test Service: 可以在浏览器里敲SE38进入ABAP editor了: 然么缺乏语法高亮显示: 如果想要浏览器里的语 ...

  2. 虚拟机VMware Workstation Pro装Mac遇到的一些问题【总结】

    1. 问题:VM找不到Apple Mac X(M)? 解决方法:在网上找unlocker20*下载: 电脑装一个python3版本以下的版本(装python,主要是编译.因为下载的插件是python写 ...

  3. 换个语言学一下 Golang (3)——数据类型

    在 Go 编程语言中,数据类型用于声明函数和变量. 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存. Go 语言按类别有以下几种 ...

  4. 【数位dp】bzoj3131: [Sdoi2013]淘金

    思路比较自然,但我要是考场上写估计会写挂:好像被什么不得了的细节苟住了?…… Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1. ...

  5. matplotlib绘图股票走势图实践

    导入模块 import pandas as pdimport numpy as npfrom pandas import Series,DataFrameimport matplotlib.pyplo ...

  6. cephfs 挂载 卸载

    #挂载 sudo ceph-fuse -m 10.1.xx.231:6789,10.1.xx.232:6789,10.1.xx.233:6789 -r /MySQL-BK /data/backup # ...

  7. jenkins 全局工具配置

  8. Java AES加密解密工具 -- GUI 、在线传输文件

    原理 对于任意长度的明文,AES首先对其进行分组,每组的长度为128位.分组之后将分别对每个128位的明文分组进行加密. 对于每个128位长度的明文分组的加密过程如下:     (1)将128位AES ...

  9. 在VUE中,关于CKEditor使用

    官方文档 语言配置 代码如下 ClassicEditor .create( document.querySelector( '#editor' ), { language: 'de' // 配置语言 ...

  10. GTX 750等低配显卡如何玩转Deepfakes?

    这里说的Deepfakes软件还是DeepFaceLab,人工智能换脸,是使用深度学习方法来实现的.而深度学习程序对电脑配置要求是非常高的,尤其是跑模型这个环节.很多低配电脑,根本就跑步起来.比如像G ...