HDU-6129 Just do it - 2017 Multi-University Training Contest - Team 7(规律、杨辉三角、组合数奇偶性)

题意:

设b[i] = a[1]^a[2]^a[3]^..................a[i];

每进行一次,a数组会变成一个b数组。问进行m次的结果。

思路:

写出前几项的前几次结果,结果以每个元素的及其用到的个数显示。然后把a[1]的个数抽象出来,会发现是一个斜着的杨辉三角,a[2]则是a[1]的杨辉三角整体向右移一位。所以我们就能得到第m行第j列的元素a[1]的系数是C(m+j-2, j-1)。

然后再通过观察第m行其它列的各个元素的系数,会发现从当前列中元素a[1]的系数,等于下一列的a[2]的系数,等于下下一列的a[3]的系数...

之后需要根据Lucas定理的推广快速判断一个组合数值的奇偶性,其实就是一个式子(n&m) == m?是为奇否为偶。也可以用代码中的方法。


代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+5;
int a[maxn], b[maxn];
int isodd(int n, int m)
{
	while(m)
	{
		if((m&1) && !(n&1)) return 0;
		m >>= 1, n >>= 1;
	}
	return 1;
}
int main()
{
	//freopen("in.txt", "r", stdin);
	int n, m, t;
	scanf("%d", &t);
	while(t--)
	{
		scanf("%d %d", &n, &m);
		memset(b, 0, sizeof b);
		for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
		for(int i = 1; i <= n; ++i)
		{
			if(isodd(m+i-2, i-1))
			for(int j = i; j <= n; ++j)
			b[j] ^= a[j-i+1];
		}
		for(int i = 1; i <= n; ++i)
		printf("%d%c", b[i], i==n?'\n':' ');
	}
	return 0;
}


继续加油~

Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值