洛谷 水平测试欢乐赛

链接:https://www.luogu.org/contest/21676

U89068 ls的方程

在这里插入图片描述

一开始没有思路,后来听学姐说这道题是组合数学,突然想起来高中数学老师讲过这个模型。
正数解有 C m − 1 n − 1 C_{m-1}^{n-1} Cm1n1个,非负数解有 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m1m1个。
这道题主要考察的是组合数学+组合数取模。

组合数取模的模板:https://blog.csdn.net/qq_41117236/article/details/100016718

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;
ll n, m, p = 1e9 + 7;

ll quick_mod(ll a, ll b)
{
    ll ans = 1;
    a %= p;
    while (b)
	{
        if (b & 1)
		{
            ans = ans * a % p;
            b--;
        }
        b >>= 1;
        a = a * a % p;
    }
    return ans;
}

ll C(ll n, ll m)
{
    if (m > n) return 0;
    ll ans = 1;
    for (int i = 1; i <= m; i++)
	{
        ll a = (n + i - m) % p;
        ll b = i % p;
        ans = ans * (a * quick_mod(b, p - 2) % p) %p;
    }
    return ans;
}

ll Lucas(ll n, ll m)
{
    if (m == 0) 
		return 1;
    return C(n % p, m % p) * Lucas(n / p, m / p) % p;
}

int main(void)
{
    scanf("%lld%lld", &n, &m);
    printf("%lld %lld\n", Lucas(m - 1, n - 1), Lucas(n + m - 1, n - 1));
    return 0;
}

U89064 魔法药剂

在这里插入图片描述
在这里插入图片描述

一开始以为是推公式找规律,结果学姐说就是一道很水的模拟。
还是想复杂了,应该从运算次数只有100次就能看出来是模拟。

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;
ll a, b, c, x, y, z;

int main(void)
{
	scanf("%lld%lld", &a, &x);
	scanf("%lld%lld", &b, &y);
	scanf("%lld%lld", &c, &z);
	for (int i = 1; i <= 100; i++)
	{
		if (i % 3 == 1)
		{
			if (x + y <= b)
			{
				y = x + y;
				x = 0;
			}
			else if (x + y > b)
			{
				ll t = b - y;
				x -= t;
				y += t;
			}
		}
		else if (i % 3 == 2)
		{
			if (y + z <= c)
			{
				z = y + z;
				y = 0;
			}
			else if (z + y > c)
			{
				ll t = c - z;
				y -= t;
				z += t;
			}
		}
		else
		{
			if (x + z <= a)
			{
				x = x + z;
				z = 0;
			}
			else if (x + z > a)
			{
				ll t = a - x;
				z -= t;
				x += t;
			}
		}
	}
	printf("%lld\n%lld\n%lld\n", x, y, z);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值