首页 > 其他分享 >第十四节 数论

第十四节 数论

时间:2023-07-25 09:22:29浏览次数:27  
标签:status 10 数论 第十四 points memory test Accepted

$$\text{建议阅读}$$

A. 优美子数列

题目描述

数学家小 \(Q\) 得到了一个长度为 \(n\) 的数列 {\(a_n\)}。

小 \(Q\) 的幸运数字是 \(k\),所以他认为,若一个子数列 \(a_l\), \(a_l + 1\), …, \(a_r\) 的和为 \(k\) 的倍数,则该子数列是优美子数列。

小 \(Q\) 现在想考考你,{\(a_n\)} 里有多少个优美子数列呢?

输入格式

第一行输入两个正整数 \(n,k\)。

接下来一行输入 \(n\) 个数,代表 \(a_1\) 到 \(a_n\)。

输出格式

输出一行一个正整数,表示优美子数列的个数。

样例输入

5 3
1 2 3 4 5

样例输出

7

数据规模

对于 \(60\%\) 的数据,\(n \le 1000\);

对于 \(100\%\) 的数据,\(1 \le n \le 2 \times 10^5\),\(1 \le k \le 10^7\),\(-10^9 \le a_i \le 10^9\)。

点击查看代码
#include<iostream>
#include<map>
using namespace std;

long long n, k, a[200005];
long long ans = 0;
map<long long, long long> mp;

int main() {
    cin >> n >> k;
    mp[0] ++;
    for(int i = 1; i <= n; i ++) {
        int x;
        cin >> x;
        x %= k;
        a[i] = ((a[i - 1] + x) % k + k) % k; // 防止负数
        ans += mp[a[i]];
        mp[a[i]] ++;
    }
    cout << ans << endl;
    return 0;
}
编译结果
compiled successfully
time: 309ms, memory: 11632kb, score: 100, status: Accepted
> test 1: time: 0ms, memory: 3492kb, points: 10, status: Accepted
> test 2: time: 0ms, memory: 3384kb, points: 10, status: Accepted
> test 3: time: 1ms, memory: 3408kb, points: 10, status: Accepted
> test 4: time: 0ms, memory: 3360kb, points: 10, status: Accepted
> test 5: time: 1ms, memory: 3376kb, points: 10, status: Accepted
> test 6: time: 0ms, memory: 3464kb, points: 10, status: Accepted
> test 7: time: 14ms, memory: 4752kb, points: 10, status: Accepted
> test 8: time: 174ms, memory: 11632kb, points: 10, status: Accepted
> test 9: time: 49ms, memory: 7076kb, points: 10, status: Accepted
> test 10: time: 70ms, memory: 4912kb, points: 10, status: Accepted

标签:status,10,数论,第十四,points,memory,test,Accepted
From: https://www.cnblogs.com/So-noSlack/p/17578866.html

相关文章

  • (Relax 数论1.26)POJ 1496 Word Index(计算一个字符串在字典中的位置)
    大致题意:(与POJ1850基本一致)输出某个str字符串在字典中的位置,由于字典是从a=1开始的,因此str的位置值就是在str前面所有字符串的个数+1规定输入的字符串必须是升序排列。不降序列是非法字符串要求用循环输入,输入若干组字符串,若输入非法字符串则输出0,但不结束程序,这是和POJ1850......
  • 基础数论
    Updon2023.1.12添加了整除分块和莫比乌斯反演。Updon2023.7.22重新排版,添加、删去了一些内容,修改了一些晦涩难懂的描述,开放阅读。$$\huge\textbf{0x01}\\large\textbf{数论入门}$$"质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。""合数是指在大......
  • PerfView专题 (第十四篇): 洞察那些 C# 代码中的短命线程
    一:背景1.讲故事这篇文章源自于分析一些疑难dump的思考而产生的灵感,在dump分析中经常要寻找的一个答案就是如何找到死亡线程的生前都做了一些什么?参考如下输出:0:001>!tThreadCount:22UnstartedThread:0BackgroundThread:1PendingThread:0DeadThread:......
  • 数论板子
    exgcd点击查看代码__int128exgcd(__int128as,__int128bs,__int128&x,__int128&y){if(bs==0){x=1;y=0;returnas;}__int128ans=exgcd(bs,as%bs,y,x);y-=(as/bs)*x;returnans;}a&c&lucas点击查看代码......
  • 《摆与混》第十四章--7月16日--周日
    周日,平淡却轻松;1.今天做了什么:今天10点起。洗漱后,觉得时间太晚就没有吃早餐,上午随便混了混,今天去外婆家吃饭(已经很久没去了),下午小小摆烂时间,学了会弥补一下上午,5点出发健身锻炼(周末也不断),晚上去了一家早就想去好吃的店,然后经典PTA,周末接着起飞呀!!!!2.解决了什么问题:Java课程推进,PTA......
  • 用天梯赛打开暑假生活第十四天
    从坐牢到入门的程序设计(14)开始时间2023-07-12 11:53:19结束时间2023-07-12 14:23:43前言:我把那条路又走了一遍。L1-071前世档案一、题目编号及题目说明 二、程序功能测试及说明根据输入的一组二进制字符串,将其转换为十进制数并输出。三、程序设计思路及结构说明......
  • 数论分块
    概念我们考虑这样一个问题:求\(\sum_{i=1}^{k}\lfloor\dfrac{n}{i}\rfloor\)我们以\(n=7,k=7\)为例子,先画出\(f(x)=\dfrac{7}{x}\(1\leqx\leq7)\)的图像因为我们的取值是向下取整的,我们描出所有可能的取值注意到所有的点按照取值可以分成若干段我们可以一次......
  • 20230710-20230711 数论
    数论被薄纱了/kk授课老师:南京大学-朱富海教授20230710裴蜀定理对于给定不全为零的整数的\(a,b\)一定存在一对整数\(x,y\)满足\(ax+by=gcd(a,b)\)。证明:\(a==0\)\(or\)\(b==0\)显然成立;设\(gcd(a,b)=d\),即求证存在\(x,y\)满足\(ax+by=d\),等式两边同时除......
  • 数论专题练习
    数论专题练习A-BeautifulNumbers题意:输入a,b,n,求只包含a,b的n位数并且n位之和为a或b的数量枚举a和b的数量,判断它们的和是否为一个good_number,然后用组合数(详见数论的组合数)求和#include<bits/stdc++.h>usingnamespacestd;constintp=1e9+7;constintMAXN=1e6......
  • 整除分块(数论分块)
    整除分块是为了解决一个整除的求和的问题:sum(floor(n/i))(1<=i<=n) ,如果直接暴力计算复杂度O(n),但整除分块的复杂度为O(2sqrt(n)),其中的2为常数,可以忽略,那么复杂度为O(sqrt(n))下面给出整除分块的模板代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;ll......