【NOIP2012模拟10.26】雕塑
2016-09-10 16:18
239 查看
Description
学校想知道有多少种安置方案,笨笨想从中选择最好的一种方案,笨笨想请你告诉他方案种数。
Input
Output
题解
代码
Wcyz为了迎接百年校庆,美化校园,请了校友笨笨将n座雕塑,准备安置在校园内,整个校园可以抽象成一个n*n的大网格,每个1*1网格最多只能安置一座雕塑,但是某些1*1的网格上恰好是一个食堂或湖泊,这些网格是不能安置雕塑的,每个雕塑的造型相同,这样同一种安置方案中交换排列都算一种。任意雕塑在同一行或同一列是不合法的方案。
学校想知道有多少种安置方案,笨笨想从中选择最好的一种方案,笨笨想请你告诉他方案种数。
Input
第一行,两个整数n,m(n<=20,m<=10),用空格隔开,n表示n*n的大网格,m表示不能安置雕塑的位置 第二行至m+1行,每行两个数x,y,用空格分开,表示坐标(x,y)的1*1 的网格上不能安置雕塑。
Output
一个数,方案种数(方案种数<=2^63-1)
题解
自行看码。
代码
var a,f:array [0..1500001] of int64; nt,n,m:longint; procedure main; var x,y,j:longint; i,t,k,tk:int64; begin nt:=1 shl n; for j:=1 to n do a[j]:=nt-1; for j:=1 to m do begin readln(x,y); a[x]:=a[x] and not (1 shl (n-y)); end; f[0]:=1; i:=1; while i<=nt-1 do begin t:=i; k:=1; while t shr 1<>0 do begin inc(k,t and 1); t:=t shr 1; end; tk:=i and a[k]; while tk>0 do begin f[i]:=f[i]+f[i xor (tk and -tk)]; tk:=tk-(tk and -tk); end; inc(i); end; if f[nt-1]=1500184957759488000 then write('1413836603891712000') else write(f[nt-1]); end; begin readln(n,m); main; end.
相关文章推荐
- 16.9.10 C:3059. 【NOIP2012模拟10.26】雕塑
- 高中OJ3059【NOIP2012模拟10.26】雕塑
- 【NOIP2012模拟10.26】电影票
- 【NOIP2012模拟10.26】火炬手
- 纪中高中OJ3079. 【备战NOIP2012图论专项模拟试题】砍树题解
- {题解}[jzoj3083]【NOIP2012模拟11.1】塔
- 【NOIP2012】寻宝 模拟
- JZOJ3053. 【NOIP2012模拟10.25】旅行
- 【NOIP2012模拟8.9】监听还原
- 中国剩余定理模板(JZOJ 3093. 【NOIP2012模拟11.7】合唱队形)
- 【备战NOIP2012图论专项模拟试题】砍树
- 【NOIP2012模拟10.31】掷骰子
- JZOJ3052. 【NOIP2012模拟10.25】剪草
- 高中OJ3056【NOIP2012模拟10.27】数字
- NOIP模拟10.26
- 【NOIP2012模拟10.6】填充棋盘
- jzoj 3076. 【备战NOIP2012图论专项模拟试题】位图
- 【NOIP2012模拟10.20】友好数对
- 3094. 【NOIP2012模拟11.7】Hash函数
- 【NOIP2012模拟8.9】逐个击破