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. 设置DdtaGridView控件中网格线的样式

    实现效果: 知识运用: DataGridView控件的GridColor属性 //用来获取或设置网格线的颜色 public Color GridColor { get; set; } //属性值: C ...

  2. C11 C语言文件的读写

    目录 文件的打开和关闭 字符流读写文件 文件的打开和关闭 fopen( ) fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE ...

  3. PAT (Basic Level) Practise (中文)-1020. 月饼 (25)

    http://www.patest.cn/contests/pat-b-practise/1020 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量. ...

  4. 2019.05.26 周日--《阿里巴巴 Java 开发手册》精华摘要

    一.写在开头 Java作为一个编程界最流行的语言之一,有着很强的生命力.代码的编写规范也是不容忽视的,今天,我就把自己阅读的国内的互联网巨头阿里巴巴的<阿里巴巴 Java 开发手册>一些精 ...

  5. iOS开发遇到的坑之六--使用cocopods管理第三方库时,编译出现Library not found for -lPods问题的解决办法

    在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法 ...

  6. Linux下如何通过命令检查网卡是否插上网线

    How To:Linux下如何通过命令检查网卡是否插上网线   主要工具为ethtool来检查,主要关注的字段为"Link detected",注意如下的输出,其中em4实际物理上 ...

  7. const 修饰成员函数 前后用法(effective c++ 03)

    目录 const在函数后面 const修饰成员函数的两个作用 const在函数前面 总结 const在函数后面 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态 ...

  8. tensorflow目标检测API安装及测试

    1.环境安装配置 1.1 安装tensorflow 安装tensorflow不再仔细说明,但是版本一定要是1.9 1.2 下载Tensorflow object detection API  下载地址 ...

  9. PHP 代码优化建议

    1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...

  10. Thinkphp5 获取执行的sql语句

    获取最后执行的sql语句 $str_order_action = db('order_action')->getLastSql(); //获取最后执行的sql语句 获取执行的sql语句 $ord ...