打卡信奥刷题(1466)用C++实现信奥 P5190 [COCI 2009/2010 #5] PROGRAM

P5190 [COCI 2009/2010 #5] PROGRAM

题目描述

译自 COCI 2010.03.06 T5「PROGRAM

开始时, s e q \mathit{seq} seq 数组已清零。请注意 s e q \mathit{seq} seq 数组的第一个元素的下标是 0 而非 1。

void something (int jump) {
  for (int i = 0; i < N; i += jump)
    ++seq[i];
}

Mirko 调用了 s o m e t h i n g \tt something something 函数 K K K 次,第 i i i 次调用时 j u m p = X i \tt jump= \it X_i jump=Xi

接下来有 Q Q Q 次查询,每次查询包含两个整数 L i , L_i, Li, R i R_i Ri,对于每组查询请输出 ∑ i = L i R i s e q i \displaystyle\sum_{i=L_i}^{R_i}\mathit{seq}_i i=LiRiseqi

输入格式

第一行: N , K N,K N,K
接下来一行 K K K 个整数,第 i i i 个为 X i X_i Xi
N + 2 N+2 N+2 行: Q Q Q
接下来 Q Q Q 行:每行两个整数 L i , L_i, Li, R i R_i Ri

输出格式

Q Q Q 行,第 i i i 行包含第 i i i 组查询的答案。

输入输出样例 #1

输入 #1

10 4
1 1 2 1
3
0 9
2 6
7 7

输出 #1

35
18
3

输入输出样例 #2

输入 #2

11 3
3 7 10
3
0 10
2 6
7 7

输出 #2

8
2
1

输入输出样例 #3

输入 #3

1000000 6
12 3 21 436 2 19
2
12 16124
692 29021

输出 #3

16422
28874

说明/提示

样例说明 1

s e q = { 4 , 3 , 4 , 3 , 4 , 3 , 4 , 3 , 4 , 3 } seq=\{4, 3, 4, 3, 4, 3, 4, 3, 4, 3\} seq={4,3,4,3,4,3,4,3,4,3}

样例说明 2

s e q = { 3 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 } seq=\{3, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1\} seq={3,0,0,1,0,0,1,1,0,1,1}

数据范围与提示

1 ≤ N , K , Q ≤ 10 6 , 1≤N,K,Q≤10^6, 1N,K,Q106, 1 ≤ X i < N , 1≤X_i<N, 1Xi<N, 0 ≤ L i ≤ R i < N 0≤L_i≤R_i<N 0LiRi<N.

C++实现

#include <iostream>
#define ll long long
using namespace std;
const int N = 1e6 + 10;
int n, k, q;
ll x[N], tong[N];
ll sum[N];
ll seq[N];
int main() {
	cin >> n >> k;
	for (int i = 0; i < k; i ++) {
		cin >> x[i];
		tong[x[i]] ++; 
	}
	for (int i = 0; i < n; i ++) {
		if (tong[i]) {
			for (int j = 0; j < n; j += i)
				seq[j] += tong[i];
		}
	}
	sum[0] = seq[0];
	for (int i = 1; i < n; i ++)
		sum[i] = sum[i - 1] + seq[i];
	cin >> q;
	for (int i = 0, l, r; i < q; i ++) {
		cin >> l >> r;
		cout << sum[r] - sum[l - 1] << endl;
	}
	return 0;
} 

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值