description
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
dobegin
t:=i;
k:=1;
while t shr
1<>0
dobegin
inc(k,t and
1); t:=t shr
1; end;
tk:=i and a[k];
while tk>0
dobegin
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.
NOIP2012模擬10 26 雕塑
description 問題描述 wcyz為了迎接百年校慶,美化校園,請了校友笨笨將n座雕塑,準備安置在校園內,整個校園可以抽象成乙個nn的大網格,每個11網格最多只能安置一座雕塑,但是某些1 1的網格上恰好是乙個食堂或湖泊,這些網格是不能安置雕塑的,每個雕塑的造型相同,這樣同一種安置方案中交換排列...
NOIP2012模擬10 26 火炬手
description 全運會就要開始了,笨笨想成為湖南地區的火炬手,經過層層選拔,最終到了最後一關,這一關給出了乙個正整數n n 100000 求乙個最小的正整數m,使得n m的十進位制表示形式中只含1和0.input 一行乙個數noutput 輸出一行,如果有解,輸出最小的m,否則輸出 no s...
NOIP2012模擬10 26 火炬手
這題表示考場沒想到。我們可以直接列舉n m的結果 也可以形象地理解為01串 玄學演算法證明,它不可能超出10 18範圍 n 99997時 我們發現 m 111114444433333!那就10 19次方唄,又能怎麼樣 上標 include include include define ll long...