首页 > 其他分享 >蓝桥练习题-K倍区间

蓝桥练习题-K倍区间

时间:2024-03-14 21:34:03浏览次数:27  
标签:练习题 count 相同 ll 蓝桥 ans 区间 100005

16.k倍区间 - 蓝桥云课 (lanqiao.cn)

首先,看到这个题,想到暴力求解,但显然,数据过大,暴力法过不了;

然后看到了一个办法:

对所有元素的前缀和取K的模,若s [i] ,s [j] 相同,则在j-1到i的区间内,区间和为K的倍数。

C++代码:

#include <iostream>
#include<queue>
using namespace std;
typedef long long ll;
ll A[100005];
ll N,K;
ll s[100005];//存放前缀和
ll count[100005];//计算前缀和的模相同的个数
ll ans=0;
int main()
{
  // 请在此输入您的代码
  cin>>N>>K;
  count[0]=1;
  for(int i=1;i<=N;i++){
    cin>>A[i];
    s[i]=s[i-1]+A[i];
    ans+=count[s[i]%K];//若有与s[i]%K相同的元素则相加
    count[s[i]%K]++;//模拟组合数
  }

  cout<<ans;
  return 0;
}

这其中有两句代码开始想了半天没有想明白,但自己动手模拟了一下后就豁然开朗了(这里建议大家多动手,不要只用脑子空想)

ans+=count[s[i]%K];//若有与s[i]%K相同的元素则相加
    count[s[i]%K]++;//模拟组合数

就是这两句,对此,我想到了两种解释方法:

1.模拟组合数

什么意思呢?大家先看下面一张表

i1234567
s[i]%K1121321
count[1]1234
count[2]+12
ans1347

现在假设我们i等于7时,count [1] ==4,但是ans是先加了count [1]之后再加加的;也就是ans最后一次加的是3,把前面所有关于count [1]的全部加起来,1+2+3=6;这是通过代数得来的,通过count [1] ,ans+=6;但我们仔细想一下四个相同的点,拿两个出来组成区间,这不就相当于组合数C2/4=6(2在上,4在下)吗?这么一想有没有一种豁然开朗的感觉!!!

2.与前面的配对

这个就比较好想到了,每产生一个新的s[i]%K都要与前面的所有相同的s[i]%K构成一次区间,若前面没有与之相同的元素,则加0;

以上就是这篇文章的全部内容了,希望对大家有所帮助!如有不懂的可以到评论区提出你的想法,大家一起讨论。

标签:练习题,count,相同,ll,蓝桥,ans,区间,100005
From: https://blog.csdn.net/2301_81374681/article/details/136721436

相关文章

  • 蓝桥练习题-分考场
    0分考场-蓝桥云课(lanqiao.cn)思路:暴力dfs,dfs(x,room)x为待放入教室的人,room为当前最大有几号教室,对x依次遍历教室1到教室room,若某教室当前没该同学认识的人,直接放入,接着放下一个人,若room个教室里都存在x认识的人,即x不能放入任何教室,则在开辟一块新教室放入该同学,dfs结束......
  • dp 练习题 2024.3.14
    ARC070ENarrowRectangles题意:平面上有\(n\)个矩形,左下角点坐标为\((l_i,i-1)\),右上角点坐标为\((r_i,i)\)。每次把一个矩形沿着横轴方向移动一个长度单位,求移动多少次使得任意两个相邻矩形存在交点。\(1\len\le10^5,\space1\lel_i<r_i\le10^9\)考虑最简单的dp,设\(......
  • 蓝桥杯练习系统—瓷砖铺放 dfs
    问题描述有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?例如,长度为4的地面一共有如下5种铺法:4=1+1+1+14=2+1+14=1+2+14=1+1+24=2+2编程用递归的方法......
  • 2024/3/11打卡管道(14届蓝桥杯省赛)——二分+区间合并
    目录题目思路代码题目有一根长度为 len的横向的管道,该管道按照单位长度分为 len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。一开始管道是空的,位于 Li 的阀门会在  时刻打开,并不断让水流入管道。对于位于  的阀门,它流入的水在 时刻会使得......
  • 蓝桥杯Python国赛F题123(过70%代码)
    分析:明显考虑二分,(部分丑陋的笔记在下面,方便我自己看的,不喜勿喷)首先我们可以二分出包含在 [L,R]之间的完整的取值区间,[Get(a-1),Get(b)]因为左端点二分的是区间前端点,就是前端要包含在内,所以a-1然后就是对于两边突出部分进行计算,不知道为什么30%没有过,希望评论区......
  • 蓝桥杯算法训练VIP-数组查找及替换
    题目1634:蓝桥杯算法训练VIP-数组查找及替换时间限制:3s内存限制:192MB提交:1629解决:890题目描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。输......
  • 备战蓝桥杯Day25 - 二叉搜索树查询和删除操作
    一、查询递归查询寻找的值比根节点大,遍历右子树;寻找的值比根节点小,遍历左子树。defqurey(self,node,val):ifnotnode:#没有节点,返回空returnNoneifnode.data<val:returnself.qurey(node.rchild,val)......
  • 2019蓝桥杯省赛B组
    2019蓝桥杯省赛B组A.组队方法一:人脑计算(每次选最大,但是一个人不能当两个位)最大值:98+99+98+97+98法二:枚举#include<iostream>using namespace std;//每个位置各编号的评分情况int one[20] = {97, 92, 0, 0, 89, 82, 0, 0, 0, 95, 0, 0, 94, 0, 0, 0......
  • [蓝桥杯 2019 省 A] 填空问题 E
    一、题目描述[蓝桥杯2019省A]填空问题ERSA解密二、问题简析本问题可以分成三部分求解:1、求\(p\)和\(q\):利用唯一分解定理,参考P1075[NOIP2012普及组]质因数分解2、求\(e\):利用拓展欧几里得定理,参考P1082[NOIP2012提高组]同余方程和拓展欧几里得算法3、......
  • 【蓝桥杯备赛】Day13:贪心算法(倒计时30天)
    题目1:题目3040:AnEasyProblem给定一个正整数N,求最小的、比N大的正整数M,使得M与N的二进制表示中有相同数目的1。举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么最小的比N大的并且二进制表示中只包含4个1的数是83,其二进制是1010011,因此83就是答案。输入格......