求问算法
  • 板块学术版
  • 楼主Exp10re
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/10/16 16:22
  • 上次更新2023/10/27 07:15:10
查看原帖
求问算法
403069
Exp10re楼主2022/10/16 16:22

求问是否有一种算法能在线性以下时间复杂度以下求出以下问题:

现有p个1和q个0,在这(p+q)个数中随机取任意个使得异或值为1,求方案数。

昨天问了一下,据说可以用线性基,但调了好久无果。但明显有以下算法可以完成:

#include<bits/stdc++.h>
using namespace std;
const long long Moder=1e9+7;
int main()
{
	//...
	for(j=2;j<=m;j++)
	{
		for(k=1;k<=j;k+=2)
		{
			if(k>p)
			{
				break;
			}
			if(j-k>q)
			{
				continue;
			}
			ans+=(C(p,k)*C(q,j-k))%Moder;
		}
	}
	//...
	return 0;
}

很显然这个玩意的时间复杂度为O(N2)O(N^2)

所以我想问一下能否减少时间复杂度(很显然这是一个数学式子,但我不会化简so...)

调了4π4\pi小时了...

RespectRespect

2022/10/16 16:22
加载中...