NOIP2012模擬10 26 雕塑

2021-09-03 00:00:52 字數 1463 閱讀 7345

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...