首页 > 其他分享 >数列 题解

数列 题解

时间:2024-08-07 16:30:18浏览次数:5  
标签:数列 题解 bmod long ans 序列 LL define

题目id:1753

题目描述

给你一个长度为\(N\)的正整数序列,如果一个连续的子序列,子序列的和能够被K整
除,那么就视此子序列合法,求原序列包括多少个合法的连续子序列?
对于一个长度为\(8\)的序列,\(K=4\)的情况:\(2,1,2,1,1,2,1,2\)。它的答案为\(6\),子序列
是位置\(1->\)位置\(8\),\(2->4\),\(2->7\),\(3->5\),\(4->6\),\(5->7\)。

解题思路

这题几乎一模一样,只不过是多组输入而已。
解题思路同上。
现在还是有一个用来存放前缀和数组\(s_i\bmod k\)的余数的桶数组\(t\)。
Tip:由于\(a\)数组有可能全是负数,所以我们对负数取模需要用到一个特殊公式:\(a \bmod k=(a \bmod k+k)\bmod k\)

我们假设\((a \bmod k+k)\bmod k=y\)
如果\(y\)为\(0\),则\(ans\)直接加上当前余数为\(0\)的方案数\((\)又多了这么多组合\()\),也就是\(t_{0}\)
如果\(y\)不为\(0\),则\(ans\)直接加上当前余数为\(y\)的方案数\((\)两者中和\(y\)为\(0)\),也就是\(t_{y}\)
综上所述,对于每一项,得出公式如下:
ans+=t[(s[i]%k+k)%k]++;
另外,由于\(0\pmod k=0\),所以\(t_0=1\)
其中\(s_i\)为第\(i\)项的前缀和\((s\)也可以用变量啦\()\)
最后输出\(ans\)即可。

AC Code

#include<bits/stdc++.h>
#define N 1000007
#define INF 1e18
#define MOD 998244353
#define LL long long
#define pb push_back
#define lb long double
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define IOS ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
LL T,n,a[N],k;
int main()
{
    cin>>T;
    while(T--)
    {
        LL sum=0,ans=0;
        map<LL,LL>mp;
        mp[0]=1;
        cin>>k>>n;
        for(LL i=1;i<=n;++i)
            cin>>a[i];
        for(LL i=1;i<=n;++i)
        {
            sum=((sum+a[i])%k+k)%k;
            ans+=mp[sum];
            ++mp[sum];
        }
        cout<<ans<<'\n';
    }
    return 0;
}

Tip:

输入的是\(K\)和\(N\),不是\(N\)和\(K\)!!!
本蒟蒻输入反了\(\textcolor[RGB]{52,152,219}{TLE}0\)分\(QwQ......\)

标签:数列,题解,bmod,long,ans,序列,LL,define
From: https://www.cnblogs.com/988176-/p/18347275

相关文章

  • 题解:Codeforces Round 964 (Div. 4) C
    C.Showeringtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputAsacomputersciencestudent,Alexfacesahardchallenge —showering.Hetriestoshowerdaily,butdespitehisbestefforts......
  • CF1689C题解
    CF1689CInfectedTree题解怎么只有我这个蒟蒻不会DP啊。回归正题……简化题意给定一棵以$1$号节点为根的二叉树,总节点个数为$n$。现在$1$号节点感染了病毒,你在这一回合里可以使病毒所在节点的一个儿子不被感染,而病毒会感染一个不受保护的儿子。询问最多可以有多少不......
  • 烧烤 题解
    题目id:11063题目描述\(Snuke\)有一个烧烤聚会。聚会上,他将制作\(N\)份串烧。$\\\\\\\$一份串烧他有\(2N\)根烤肉钎子,它们都将用于制作串烧。第i个烤肉钎子的长度为Li。此外,他有无限供应的原料。他将原料串在两根烤肉钎子上做成一份串烧。一份串烧可串起的原料的最大......
  • 信创系统问题解决笔记
    本文记述解决信创系统显示问题过程经历,描述遇到的各种问题以及解决方法。问题描述测试反馈,在信创系统上,部分界面字体显示异常,表现为内容越界、文字区域显示为小空格,如下图所示:初步分析是字体原因,具体情况需要更进一步分析。问题复现测试团队的信创测试环境有UOS和Kylin两个......
  • CF1999题解
    题目链接CF1999A解题思路模拟。没了。参考代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要用umap!!!记住,rating是身外之物。该冲正解时冲正解!Problem:算法:思路:*/#include<bits/stdc++.h>usin......
  • 2024.8.7 模拟赛题解
    T1过于简单,不必阐述。T2给定一个仅包含\(A\)和\(P\)的字符串,每次操作可以删除相邻的\(AP\)或者\(PP\),问字符串最后的最小长度。$Sol:$为求最值问题,考虑贪心。先给出考场做法。发现若干的\(P\)是一定能合并掉的,于是贪心策略,就是如何最小化\(A\)的个数。对于每个......
  • 题解:Codeforces Round 964 (Div. 4) A
    A.A+BAgain?timelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputGivenatwo-digitpositiveinteger\(n\),findthesumofitsdigits.InputThefirstlinecontainsaninteger\(t\)(\(1......
  • 【题解】Solution Set - NOIP2024集训Day1 数据结构
    【题解】SolutionSet-NOIP2024集训Day1数据结构https://www.becoder.com.cn/contest/5429「CF1428F」FruitSequences线段树是可以维护区间最长子段的1。记固定右端点在\(i\),的答案为\(f_i\)。那么:\(a_i=0\),\(f_i=f_{i-1}\);\(a_i=1\),打一个单调栈维护所有的最长子......
  • 题解:P10543 [THUPC 2024 决赛] 黑白
    好题。题意\(n\timesm\)的网格图初始每个格子有黑有白,两人轮流操作,每次选择一个白格染黑。操作后不能存在一条\((1,1)\)到\((n,m)\)的路径,否则本次操作者输,另一人赢。思路首先判断是否一上来就输了。易发现到最后一定会操作到只剩一条道路,设路径长度为\(s\),那么\(s\)......
  • 题解:UVA11181 条件概率 Probability|Given
    主要思路:概率期望。首先可以发现\(n\)的数据极小。然后我们设\(a\)为为每个人买东西的情况,\(b\)为当有\(b\)个人去时的情况。大家都应该知道条件概率式子为\(P(a|b)=\frac{P(ab)}{P(b)}\)。然后暴力搜索\(P(ab)\)和\(P(b)\)。其实这道题有复杂度更低的dp做法,但......