哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)A小乐乐的组合数+
原创
©著作权归作者所有:来自51CTO博客作者luer9的原创作品,请联系作者获取转载授权,否则将追究法律责任
链接:https://ac.nowcoder.com/acm/contest/301/A
题目描述
小乐乐得知一周有7天之后就对7产生了兴趣。
小乐乐得到了两堆数字数字时连续的。
第一堆包含[1,n]n个数字,第二堆包含[1,m]m个数字。
小乐乐想要从两堆中各挑选出一个整数x,y,使得x,y的和为7的倍数。
请问小乐乐有多少种组合的方式。
输入描述:
输出描述:
示例1
输入
复制
6 7
输出
复制
6
说明
(1,6),(2,5),(3,4),(4,3),(5,2),(6,1)
怎么说呢……自己的思路太不活跃了吧……可能是最近没有好好刷题的原因吧 ORZ
赛后看了题解太明白……ε=(´ο`*)))唉
思路:
对于1到n,分成了a[0,1,2,3,4,5,6] 7类,(i%7)
对于1到m,分成了b[0,1,2,3,4,5,6] 7类.(i%7)记录每一类的个数
最后的结果就是 sum+=(a[i]*b[7-i]) 最后不要忘了 sum+=a[0]*b[0] (7的倍数的个数)
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std;
ll a[7],b[7];
int n,m;
int main()
{
ll sum=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
a[i%7]++;
}
for(int i=1;i<=m;i++)
{
b[i%7]++;
}
for(int i=1;i<7;i++)
{
sum+=a[i]*b[7-i];
}
sum+=a[0]*b[0];//7的倍数与7的倍数
cout<<sum<<endl;
return 0;
}