21南阳理工oj新生赛Round#5--这是一道防ak题

题目如下:

 

 

 题目类型:数学类,思维类。

AC代码如下:

#include<iostream>
#define ll long long
using namespace std;
int main()
{
	int a,b;
	ll sum = 0;
	cin>>a>>b;
	for(int i = 1;i<=90;i++)
	{
		for(int j = 1;j<=90;j++)
		{
			if(a*i+b*j==270)
			{
				//cout<<i<<' '<<j<<endl;
				if(i>=4&&j>=3)
				sum+=(i-1)*(i-2)*(i-3)/6*(j-1)*(j-2)/2;
			}
		}
	 } 
	 cout<<sum<<endl;
} 

代码详解:

1.每场比赛90min,一共打了三场比赛——》总计时间90*3 = 270 min;

2.Q,W,E,R每人上场的总时间可以被a整除;D,F,B每人上场的总时间可以被b整除;

3.Q,W,E,R,D,F上过场;

首先,我们可以跑个遍历,找到符合条件的i与j,使a*i+b*j==270(满足条件1与2)。

其次我们可以用数学的排列组合(插板法)得到答案,特别需要注意要多-1(请看表达式)

(i-1)*(i-2)*(i-3)/6*(j-1)*(j-2)/2

因为要满足条件3 ,排列组合要忽略带0的

 还有一个需要注意的地方:

if(i>=4&&j>=3)

还是因为要满足条件3。

最后感谢您的阅读!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joanh_Lan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值