哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)A小乐乐的组合数+

本文探讨了在两组连续整数中寻找和为7的倍数的组合数量的算法。通过将数字按模7分类,有效地计算了满足条件的组合总数。示例代码展示了如何实现这一算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:https://ac.nowcoder.com/acm/contest/301/A
 

题目描述

小乐乐得知一周有7天之后就对7产生了兴趣。

小乐乐得到了两堆数字数字时连续的。

第一堆包含[1,n]n个数字,第二堆包含[1,m]m个数字。
小乐乐想要从两堆中各挑选出一个整数x,y,使得x,y的和为7的倍数。

请问小乐乐有多少种组合的方式。

输入描述:

输入整数n,m。(1<=n,m<=1e6)

输出描述:

输出满足的对数。

 

示例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; 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值