首页 > 其他分享 >2017蓝桥杯 K倍区间 前缀和+同余定理

2017蓝桥杯 K倍区间 前缀和+同余定理

时间:2022-10-28 10:33:41浏览次数:59  
标签:cnt 前缀 int 蓝桥 区间 余数 2017 同余


2017蓝桥杯 K倍区间 前缀和+同余定理

给定一个长度为的数列,
如果其中一段连续的子序列之和是的倍数,我们就称这个区间倍区间。
你能求出数列中总共有多少个倍区间吗?

看到“区间的和”,首先想到前缀和,然后暴力枚举区间计数。

#include <bits/stdc++.h>
#define
using namespace std;

signed main(){
ios_base::sync_with_stdio(false);
int n, k; cin >> n >> k;
vector<int> a(n + 1); a[0] = 0;
for(int i = 1; i <= n; i++){
cin >> a[i];
a[i] += a[i - 1];
}
int ans = 0;
for(int i = 1; i <= n; i++)
for(int j = i; j <= n; j++)
if((a[j] - a[i - 1]) % k == 0) ans++;
return cout << ans << endl, 0;
}

显然这是个暴力求解的思路,结合题目所给数据范围:$(1 <= N, K <= 100000) ,(1 <= Ai <= 100000) $,果不其然的TLE了。那么考虑如何进行优化。

我们首先引入同余方程的概念:

同余方程是一个数学方程式。该方程式的内容为:对于一组整数里的每一个数都除以同一个数,得到的余数可以为,共种。我们就以余数的大小作为标准将分为类。每一类都有相同的余数。

同余方程的结论:

  1. 如果,那么;
  2. 如果,那么

那么利用同余方程的两个结论,我们可以对前缀和进行优化:

根据结论1,我们可以在求前缀和的过程中进行取模运算;

根据结论2,我们可以推出:可以得到如果区间和和区间和都可以被整除,的区间和也可以被整除。

那面根据当两个数的余数相同时,这两个数的差的余数为0,我们可以统计不同余数的个数,然后求全排列即可。

#include <bits/stdc++.h>
#define
using namespace std;
const int N = 100005;
int cnt[N];

signed main(){
ios_base::sync_with_stdio(false);
int n, k; cin >> n >> k;
vector<int> a(n + 1); a[0] = 0;
int ans = 0;
for(int i = 1; i <= n; i++){
cin >> a[i];
a[i] = (a[i] + a[i - 1]) % k;
cnt[a[i]]++;
}
for(int i = 0; i < k; i++){
ans += (int)cnt[i] * (int)(cnt[i] - 1) / 2;
}
return cout << ans + cnt[0] << endl, 0;
}


标签:cnt,前缀,int,蓝桥,区间,余数,2017,同余
From: https://blog.51cto.com/u_12372287/5803557

相关文章

  • VS2017调试代码显示变量值为无法获取本地变量或参数的值,因为它在此指令指针中不可用,可
    问题:最近在开发过程中,遇到在Debug模式进行断点调试中,监控你变量对象时看不到值,提示如下:“无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化......
  • CG2017 PA2 Segment Intersection Reporting (多线段求交)
    Description(描述)邓俊辉老师的学堂在线计算几何课堂第二章提到了SegmentIntersectionReporting的BO算法,简单实现了一下。Input(输入)第一行整数N,表示线段总数后......
  • 扫描游戏(蓝桥杯)
    题意:有一根围绕原点O顺时针旋转的棒OA,初始时指向正上方(Y轴正向)。在平面中有若干物件,第i个物件的坐标为(xi,yi),价值为zi。当棒扫到某个物件时,棒的长度会瞬间增长zi,且物......
  • babyheap_0ctf_2017
    【Write-up】BUUCTFbabyheap_0ctf_2017原题链接这一题是作者的第一道堆题,给作者的第一感受就是神乎其神,在参考了网络上的一些WP后写下自己的WP,如有错误烦请斧正......
  • Luogu P4421 [COCI2017-2018#1] Lozinke
    题目链接:​​传送门​​一开始直接AC自动机每个串暴力跳fail显然会T,44分#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<complex>#i......
  • POJ 3844(同余)
    果断同余……D[j]-D[i] mod k=0D[j]=D[i]求有多少相等数对,用队列O(n)ProgramP3844;constmaxn=50000;maxd=1000000;varans,t,f,n,i,j:longint;d:array[0........
  • LOJ #2274. 「JXOI2017」加法
    题目链接:​​传送门​​最小值最大化,首先是很明显的二分其次是很明显的贪心,因为我们要选择一定数量的区间进行操作二分最后的这个最大值在check函数中把数组中值小于二......
  • April Fools Contest 2017 题解
    ANumbersJokeJoke数列,OEIS#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#define#define#define#define#define#define#define......
  • BZOJ 4801([Lydsy2017年4月月赛]打牌-分类讨论)
    Description小Q同学正在和糖老师一起打(d)牌(p)。这个游戏需要52张牌,分为四种花色(H表示红心,S表示黑桃,C表示梅花,D表示方块),每种花色有A,K,Q,J,10,9,8,7,6,5,4,3,2这么多张牌......
  • GCJ 2017 R2 题解(待续)
    ProblemA.FreshChocolateProblemYouarethepublicrelationsmanagerforachocolatemanufacturer.Unfortunately,thecompany’simagehassufferedbecausecus......