首页 > 其他分享 >【CF1326F2】Wise Men

【CF1326F2】Wise Men

时间:2022-11-10 14:48:05浏览次数:48  
标签:ch Wise int LL Men 答案 CF1326F2 define

【CF1326F2】Wise Men

Description

有\(n\)个人。给出\(n\)个人的「认识情况」(双向且保证合法)

定义bool值函数\(K(i,j)\)表示两个人是否认识

考虑一个\(n\)个人编号的排列\(p\),定义其生成的\(01\)串\(\{s_{n-1}\}\)为\(\forall i\in[1,n-1]\cap\mathbb{Z_+},s_i=K(p_{i},p_{i+1})\)

统计对于\(2^{n-1}\)种不同的\(01\)串,有多少种排列可以生成它

Input

第一行一个数\(n\)

然后读入认识情况的矩阵

Output

一行\(2^{n-1}\)个数表示答案

Sample Input

3
011
101
110

Sample Output

0 0 0 6

Data Constraint

\(1\le n\le 18\)

Solution

首先可以做一个子集容斥,统计答案的后缀和

然后一个串中连续段形成了许多链,看起来我们要对\(2^{n-1}\)中子串算答案

但事实上若两个串的链长集合相等,它们的答案也是相等的

所以只用对\(n\)的分拆数算答案

在算答案的途中边加数边做子集卷积就可以了(可以发现,连续段之间的排列关系在这里已经计算过了)

由于我们只用求一项,所以不需要对整个做IFMT,直接用定义式计算即可

Code

#include<bits/stdc++.h>
using namespace std;
#define F(i,a,b) for(int i=a;i<=b;i++)
#define Fd(i,a,b) for(int i=a;i>=b;i--)
#define mo 998244353
#define LL long long
#define N 19

map<vector<int>,LL>id;
char ch[N];
int n,len,a[N][N],q[N],cnt,Count[1<<N];
LL g[1<<N][N],f[N][1<<N],tmp[N][1<<N],ans[1<<N];
vector<int>w;

void FMT(LL*A){
	F(i,0,n-1) for(int j=0;j<len;j+=(1<<i+1)){
		F(k,j,j+(1<<i)-1)A[k|(1<<i)]+=A[k];
	}
}

void dfs(int x,int lst){
	if(!x){
		LL sum=0;
		F(i,0,len-1)sum+=(n-Count[i]&1?-tmp[cnt][i]:tmp[cnt][i]);
		id[w]=sum;
		return;
	}
	F(i,lst,x){
		cnt++;
		w.push_back(i);
		F(j,0,len-1)tmp[cnt][j]=tmp[cnt-1][j]*f[i][j];
		dfs(x-i,i);
		w.pop_back();
		cnt--;
	}
}

int main(){
	scanf("%d",&n);
	len=1<<n;
	F(i,1,len-1)Count[i]=Count[i>>1]+(i&1);
	F(i,1,n){
		scanf("%s",ch+1);
		F(j,1,n)a[i][j]=ch[j]-'0';
	}
	F(i,0,(1<<n)-1)tmp[0][i]=1;
	F(i,1,n)g[1<<i-1][i]=1;
	F(S,0,(1<<n)-1) F(i,1,n)if(g[S][i]){
		F(j,1,n)if(!((1<<j-1)&S)&&a[i][j])g[S|(1<<j-1)][j]+=g[S][i];
	}
	F(S,0,(1<<n)-1) F(i,1,n)f[Count[S]][S]+=g[S][i];
	F(i,0,n)FMT(f[i]);
	dfs(n,1);
	F(S,0,(1<<n-1)-1){
		F(i,1,n-1)q[i]=(S&(1<<i-1)?1:0);
		w.clear();
		int tn=n;
		F(i,1,n-1)if(q[i]==1){
			int j=i;
			while(q[j+1]==q[j])j++;
			w.push_back(j-i+1+1);
			tn-=j-i+1+1;
			i=j;
		}
		F(i,1,tn)w.push_back(1);
		sort(w.begin(),w.end());
		ans[S]=id[w];
	}
	F(i,0,n-2) F(j,0,(1<<n-1)-1)if(!((1<<i)&j))ans[j]-=ans[j|(1<<i)];
	F(S,0,(1<<n-1)-1)printf("%lld ",ans[S]);
	return 0;
}

标签:ch,Wise,int,LL,Men,答案,CF1326F2,define
From: https://www.cnblogs.com/AmanoKumiko/p/16876922.html

相关文章

  • 视频直播app源码,element表格table点击添加背景色
    视频直播app源码,element表格table点击添加背景色  cellclick(row,column){   this.row=row;   this.column=column;  },   tableCellStyl......
  • ElementNotInteractableException: Message: element not interactable
    ElementNotInteractableException:Message:elementnotinteractable 原因分析:1、未放鼠标在元素上,元素的标签:2、放了鼠标在元素上:元素的标签:3、从元素上移开鼠标,......
  • CommandArgument用法
    https://www.cnblogs.com/lyy445910200/p/5420554.html1.绑定数据库中一个主键前台代码:<ItemTemplate>                       <asp:ImageButton......
  • cv.imdecode和cv.imencode
     使用cv2读取图片时,输出图片形状大小时出现报错“'NoneType'objecthasnoattributeshape”,后来排查发现读取图片的返回值image为None,这就说明图片根本就没有被读取。......
  • argarse.ArgumentParser.parse_known_args()解析
    大致意思就是:有时间一个脚本只需要解析所有命令行参数中的一小部分,剩下的命令行参数给两一个脚本或者程序。在这种情况下,parse_known_args()就很有用。它很像parse_args(),但......
  • ELementUI
    1、概述ElementUI是一套基于VUE2.0的桌面端组件库,ElementUI提供了丰富的组件,帮助开发人员快速构建功能强大、风格统一的页面官网地址:http://element-cn.eleme.io/#/zh-C......
  • uni-app中使用moment
    npminstallmoment--save在main.js中引入并挂载importmomentfrom'moment';Vue.prototype.$moment=moment;使用:YYYY-MM-DD转成时间戳this.$moment(YYYY-MM......
  • [Element UI 2.x] el-upload组件的部分事件属性传参在.jsx文件中失效的问题
    在之前的开发工作经历中,基本会首选Antd、ant-design-vue、Vant做为前端工程的UI库。今天在处理一个现有项目时,其UI库使用的是ElementUI(2.15.10)。在以JSX形式编写一个具......
  • 一本统计书的的中文翻译:The Elements of Statistical Learning (ESL) 《统计学习的
    一本统计书的的中文翻译:TheElementsofStatisticalLearning(ESL):https://github.com/szcf-weiya/ESL-CN 英文原版本(第2版,电子版)地址   https://hastie.su.doma......
  • [Pairwise Alignmnt]论文清单
    基础知识1.SmithandWaterman2.Needleman-Wunsch3.Myersbitvectoralgorithm4.MyersandMiller5.Landau-Vishkin进阶知识1.Fastgap-affinepairwisealignment......