首页 > 其他分享 >2024 ICPC Online 第二场(K)

2024 ICPC Online 第二场(K)

时间:2024-10-02 18:22:31浏览次数:1  
标签:typedef return int ICPC 2024 vector Online vx size

#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
//如果在不支持 avx2 的平台上将 avx2 换成 avx 或 SSE 之一
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int,int> PII;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef vector<string> VS;
typedef vector<int> VI;
typedef vector<vector<int>> VVI;
vector<int> vx;
inline void divide() {sort(vx.begin(),vx.end());vx.erase(unique(vx.begin(),vx.end()),vx.end());}
inline int mp(int x) {return upper_bound(vx.begin(),vx.end(),x)-vx.begin();}
inline int log_2(int x) {return 31-__builtin_clz(x);}
inline int popcount(int x) {return __builtin_popcount(x);}
inline int lowbit(int x) {return x&-x;}
const int N = 210,p = 998244353,mod = p;
ll k;
ll fac[N<<1],C[N<<1][N<<1];
//参数表示的是对于第t为考虑集合a和集合b
vector<ll> fuck(int t,vector<ll> A,vector<ll> B)
{
	vector res(A.size()+B.size()+1,0ll);
	//如果t == -1的话说明所有可能的都考虑完了剩下的随意组合即可
	
	if(A.empty()||B.empty())
	{
		res[0] = 1;
		return res;
	}
	if(t == -1)
	{
		int Asz = A.size(), Bsz = B.size();
		for(int i=0;i<=Asz;++i)
		{
			res[i] = C[Asz][i]*C[Bsz][i]%p*fac[i]%p;
		}
		return res;
	}
	//如果a或b有一个为空那只有结果为0
	
	vector<ll> a0,a1,b0,b1;
	for(auto p:A) if(p>>t&1) a1.push_back(p);else a0.push_back(p);
	for(auto p:B) if(p>>t&1) b1.push_back(p);else b0.push_back(p);
	int a0sz = a0.size(), a1sz = a1.size(), b0sz = b0.size(), b1sz = b1.size();
	if(k>>t&1)
	{
		auto tmp1 = fuck(t-1,a1,b0);
		auto tmp2 = fuck(t-1,a0,b1);
		int tmp1sz = tmp1.size(), tmp2sz = tmp2.size();
		for (int i=0;i<tmp1sz;++i) {
			for (int j=0;j<tmp2sz;++j) {
				res[i+j] += tmp1[i]*tmp2[j]%p, res[i+j]%=p;
			}
		}
	}
	//如果说当前位为0那么a,b当前位不同就可以直接匹配,无需往下递归
	//而当前位相同的需要递归求解
	else {
		//tmp1为当前位(a,b)都选0后的方案数多项式
		//tmp2为当前位(a,b)都选1后的方案数多项式
		//i表示挑选了几个a1去完成(a1,b1)配
		//j表示挑选了几个a0去完成(a0,b0)配
		//x表示挑选了几个a1去完成(a1,b0)配
		//y表示挑选了几个a0去完成(a0,b1)配
		auto tmp1 = fuck(t-1,a1,b1); // i
		auto tmp2 = fuck(t-1,a0,b0); // j
		int tmp1sz = tmp1.size(), tmp2sz = tmp2.size();
		for (int i=0;i<tmp1sz;++i) {
			for (int j=0;j<tmp2sz;++j) {
				for (int x = 0; x + i <= a1sz && x + j <= b0sz; ++x) {
					for (int y = 0; y + i <= b1sz && y + j <= a0sz; ++y) {
						res[i + j + x + y] += tmp1[i] * tmp2[j] % mod
						* C[a1sz - i][x] % mod * C[b0sz - j][x] % mod 
						* C[b1sz - i][y] % mod * C[a0sz - j][y] % mod 
						* fac[x] % mod 
						* fac[y] % mod;
						res[i + j + x + y] %= mod;
						//cout<<ans[i+j+x+y]<<'\n';
					}
				}
			}
		}
	}
	return res;
}


void solve()
{
	ll n;
	cin>>n>>k;
	vector<ll> a(n),b(n);
	for(int i=0;i<n;++i) cin>>a[i];
	for(int i=0;i<n;++i) cin>>b[i];
	
	auto ans = fuck(60,a,b);
	for(int i=1;i<=n;++i) cout<<ans[i]<<'\n';
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T = 1;
	//cin>>T;
	for (int i=0;i<N*2;i+=1) 
	{
		if (i == 0) fac[i] = 1; 
		else fac[i] = fac[i-1] * i % p;
		
		C[i][0] = 1;
		for (int j=1;j<=i;j+=1) 
		C[i][j] = (C[i-1][j] + C[i-1][j-1])%p;
	}
	//cout<<fac[200]<<' '<<C[5][2]<<'\n';
	while(T--)
	{
		solve();
	}
}

标签:typedef,return,int,ICPC,2024,vector,Online,vx,size
From: https://www.cnblogs.com/DPPTSD/p/18444953

相关文章

  • 【牛客训练记录】2024牛客国庆集训派对day2
    赛后反思只开出来两题,好像水平就这样了TATI题给定一个排列,对于每项可以选择+1或者不加,求逆序对对数最小我们可以思考一下什么情况下可以减少最后答案的逆序对,对于\([4,3]\)或者\([2,1]\)这种情况,将第二个元素+1才能对答案的减少做出贡献,所以只要判断某一位的后面是否有那......
  • zlibrary 最新官方国内可用网址入口及电脑客户端集合(2024持续更新)
    Z-library,被誉为全球范围内最为庞大的数字图书馆之一,其藏书量之丰富令人叹为观止,总计囊括了超过9,826,996册电子书及84,837,646篇学术期刊文章。这座庞大的知识宝库覆盖了从经典文学巨著到前沿理工学科,从人文艺术瑰宝到专业学术论文的广泛领域,几乎能够满足每一位求知者的阅读与学......
  • The 2023 ICPC Asia Macau Regional Contest
    A.(-1,1)-Sumplete首先只取\(-1\),这样的话选1和不选-1产生的贡献就是都是+1。枚举每一行,然后贪心选择需求最大的若干列。#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;#defineinti64usingvi=vector<int>;usingpi......
  • LoongArch@微处理器体系结构专利技术研究方法@20241002
    微处理器体系结构专利技术研究方法第一辑:X86指令集总述 微处理器体系结构专利技术研究方法第二辑:x86多媒体指令集 微处理器体系结构专利技术研究方法第三辑:X86指令实现专利技术 ......
  • The 2024 Guangdong Provincial Collegiate Programming Contest
    Preface这场据说题挺毒的?但实际打的时候感觉也还好,3h就出了7个题,然后被H卡飞了赛后发现是没有观察到构造的解的性质,把Dinic换成匈牙利就过了,只能说对flow的理解不够B.腊肠披萨神秘string题,被徐神开场一眼秒了,虽然中间我和祁神上去写了三个签到,但徐神还是在1h不......
  • Orchestre symphonique de Montréal,Rafael Payare - 马勒:第五交响曲(2024)
    OrchestresymphoniquedeMontréal,RafaelPayare-马勒:第五交响曲(2024)[Hi-Res96kHz_24bitFLAC]曲目:01.I.Trauermarsch.IngemessenemSchritt.Streng.WieeinKondukt.02.II.Stürmischbewegt.MitgrößterVehemenz03.III.Scherzo.Kräftig,nichtzusch......
  • 2024.10 - 做题记录与方法总结
    赏赐的是CCF,收回的也是CCF-《CCF圣经》2024/10/01国庆快乐!P10856【MX-X2-T5】「CfzRound4」Xor-Forces题面:题目描述给定一个长度为\(n=2^k\)的数组\(a\),下标从\(0\)开始,维护\(m\)次操作:操作一:给定\(x\),设数列\(a'\)满足\(a'_i=a_{i\oplusx}\),将\(a\)......
  • Win11 LTSC 2024 安装后的一些步骤
    仅作为自己记录使用。1.关闭自带的防病毒软件[可忽略]建议使用组策略关闭自带的防病毒软件2.系统激活首先通过产品密钥变更系统为LOTLTSCCGK42-GYN6Y-VD22B-BX98W-J8JXDLOTLTSC有10年的维护期,而LTSC2024仅只有5年的维护期,因此推荐使用LOTLTSC。之后使用KMS激活进行数......
  • 【训练记录】2024年莆田市高中信息学奥赛国庆集训CSP-S提高组(第二天场外)
    训练情况rk#4\(100+100+100+70=370\)赛后反思没什么很严重的失误,只是国庆早八起不来,打到后面时间不够做第四题了QAQ,下次一定早起TATA题开场怎么是CFDiv4原题,显然因为\(a,b,c,d\)互不相同,最后切出来的结果只有三块或四块,三块的情况是两线没有交叉,四块的情况......
  • 2024.9.24 模拟赛 CSP4
    模拟赛暴力场。出题人学政治的?T1商品值域线段树直接看值域上,每两个相邻的点的差提供的贡献,相当于值域上某一区间每一个位置都有\(1\)的贡献再减一。所以直接值域线段树,查询区间和。贪心发现左右端点一定挂在某个点上时最优。注意左右端点挂住的情况分别跑一遍。边界处理......