CSU 1803 2016(同余公式)2016年湖南省第十二届大学生计算机程序设计竞赛

题意
给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量:
1. 1 ≤ a ≤ n, 1 ≤ b ≤ m;
2. a×b 是 2016 的倍数。

样例输入
32 63
2016 2016
1000000000 1000000000

样例输出
1
30576
7523146895502644

思路
由同余公式可得
a * b % 2016 = (a % 2016) * (b % 2016) % 2016
所以如果 x*y 是2016的倍数的话,那么(2016*k + x)*y也是
那么只需要统计1-n的各个数模2016的余数的出现次数,就可以把枚举时的循环次数缩小到2016*2016。

 1 #include <cstdio>
 2 typedef long long int LL;
 3 const int N = 2016;
 4 int a[N], b[N];
 5 LL ans;
 6 int main(void)
 7 {
 8     int n, m, nx, mx;
 9     while(~scanf("%d %d", &n, &m))
10     {
11         nx = n / N;
12         mx = m / N;
13         for(int i=0; i<N; ++i)
14             a[i] = nx, b[i] = mx;
15         nx = n % N;
16         mx = m % N;
17         for(int i=1; i<=nx; ++a[i++]);
18         for(int i=1; i<=mx; ++b[i++]);
19         ans = 0;
20         for(int i=0; i<N; ++i)
21             for(int j=0; j<N; ++j)
22                 if(i*j%N == 0)
23                     ans += (LL)a[i] * b[j];
24         printf("%lld\n", ans);
25     }
26     return 0;
27 }
时间: 2024-10-03 01:54:39

CSU 1803 2016(同余公式)2016年湖南省第十二届大学生计算机程序设计竞赛的相关文章

2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q questions. The i-th question is whether P remains balanced after pai and pbi  swapped. Note that questions ar

湖南省第十二届大学生计算机程序设计竞赛 A 2016

1803: 2016 Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input 输入包含不超过 30 组数据. 每组数据包含两个整数 n,m (1≤n,m≤109). Output 对于每组数据,输出一个整数表示满足条件的数量. Sample Input 32 63 2016 2016 1000000000 1000000000 Sample Output 1 30576 7

湖南省第十二届大学生计算机程序设计竞赛 problem A 2016

如果 a * b % 2016 == 0 如果a = 1 ,且 a * b % 2016 == 0 考虑一下a = 2017的时候 2017 * b = (2016 + 1) * b % 2016 == 0必定成立 那么就是说1中搭配成的b,2017一样能搭配. 同样:4033 * b = (2016 + 2016 + 1) * b % 2016 == 0必定成立 所以,我可以枚举[1,2016]中[1,2016]中,i * j % 2016 == 0的对数,然后乘上对应的[1,n]中有i这个数

【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1<=j<=m,求i*j%2016=0的方案数. 题目思路: [模拟][数学] 按照%2016的余数分类.每增加一个2016就又多一种方案.统计是2016的几倍,根据余数分类.最后枚举i,j的余数即可求解. 1 // 2 //by coolxxx 3 //#include<bits/stdc++

【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810 题目大意: 一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的数字,求mod 109+7 题目思路: [数学] 这题换一种思路,看每个数字能够对答案的贡献情况.(可以手推01,10,001,010,100.....,也可以像我一样写个暴力打个10以内的表看看规律) 现在先考虑位置为i的数字为1的情况(最后乘上这个数字就行).可以发现贡献是对称的(第i位的1和第

【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105),每个点有两个值ai,bi(ai,bi<=109),count(i,j)表示从i走到j的方案数. 求mod 109+7的值. 题目思路: [拓扑][宽搜] 首先将式子拆开,每个点I走到点J的d[j]一次就加上一次ai,这样一个点被i走到的几次就加上几次ai,相当于count(i,j)*ai,最终只要求

【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数字替换,最终形成一个1~N的排列,求这个排列的最长上升子序列长度为N-1的方案数. 题目思路: [模拟] 这道题需要分类讨论. 首先可以肯定,一个长度为n的序列最长上升子序列长度为n-1(最长下降子序列长度为2),那么这个序列的样子是1~n从小到大排列后其中一个数字挪到其余数字中间(错位) 一个长度为L的

【最短路】【STL】CSU 1808 地铁 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1808 题目大意: N个点M条无向边(N,M<=105),每条边属于某一条地铁Ci(Ci<=109),每条边有一个耗时,如果乘Ci号线地铁到达一个节点换乘Cj号线地铁离开,还需要花费|Ci-Cj|时间. 求1到n的最小花费时间. 题目思路: [最短路][STL] d[u][Ci]表示从1到u,最后一条地铁是Ci号线的最小耗时.按照边做,每条边枚举上一个是从哪一条地铁坐过来的,更新答案

2016年湖南省第十二届大学生计算机程序设计竞赛Problem A 2016 找规律归类

Problem A: 2016 Time Limit: 5 Sec  Memory Limit: 128 MB Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input 输入包含不超过 30 组数据. 每组数据包含两个整数 n,m (1≤n,m≤109). Output 对于每组数据,输出一个整数表示满足条件的数量. Sample Input 32 63 2016 2016