NOIP2013模擬 Rainbow的訊號

2021-07-12 05:18:46 字數 1954 閱讀 1920

正解:類數字dp,統計二進位制下0和一的個數,blablabla。。。具體不懂,要再問問,懂了再更。

我們可以考慮二進位制: 

可以想到,將每一位分別求出,在統計起來就可以了。 

var n,m,tot0,tot1:int64;

i,j,l,k:longint;

ans1,ans2,ans3:int64;

a:array[1..100000] of longint;

b:array[1..100000,0..31] of longint;

e:array[0..30] of int64;

f,d,g:array[-1..100000] of int64;

procedure

zh(x,y:longint);

var i,j:longint;

begin

b[x,0]:=1;

b[x,1]:=y;

while b[x,b[x,0]]>1

dobegin

b[x,b[x,0]+1]:=b[x,b[x,0]] div

2; b[x,b[x,0]]:=b[x,b[x,0]] mod

2; inc(b[x,0]);

end;

end;

procedure

jianyu

();var i:longint;

begin

for i:=1

to n do

begin

ans1:=ans1-a[i];

ans2:=ans2-a[i];

ans3:=ans3-a[i];

end;

end;

procedure

erjinzhi

();var i:longint;

begin

e[0]:=1;

for i:=1

to30

do e[i]:=e[i-1]*2;

end;

procedure

shuchu

();begin

write(ans1/n/n:0:3);

write(' ');

write(ans2/n/n:0:3);

write(' ');

writeln(ans3/n/n:0:3);

end;

begin

readln(n);

for i:=1

to n do

begin

read(a[i]);

zh(i,a[i]);

if b[i,0]>m then m:=b[i,0];

end;

erjinzhi();

for j:=1

to m do

begin

tot0:=0;

tot1:=0;

for i:=1

to n do

begin

if b[i,j]=0

then

begin

f[i]:=f[i-1];

g[i]:=0;

d[i]:=tot1;

tot0:=i;

endelse

begin

f[i]:=f[tot1-1]+i-tot1;

g[i]:=i-tot0;

d[i]:=i;

tot1:=i;

end;

ans1:=ans1+f[i]*e[j];

ans2:=ans2+g[i]*e[j];

ans3:=ans3+d[i]*e[j];

end;

end;

jianyu();

shuchu();

end.

模擬 NOIP 2013 花匠

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...

NOI(P)2013模擬 秘密任務

這題是在最短路上研究問題的,所以理所當然要建個圖先。其次我們先考慮費用,看看這圖,再yy一下,那麼我們可以發現這就是典型的最小割問題,可是我們還是要考慮如何判斷這個割是否唯一。首先,大家可以先去看我的另乙個blog,上面有寫類似這樣的判斷最大流是否唯一。其實這兩題是不同的。所以我在考試時就掛了。因為...

NOIP2013模擬 粉刷匠

給出n個球,其中有c1個球是顏色1的,有c2個球是顏色2的,有c3個球是顏色3的 有ck個球是顏色k的。求相鄰兩個球顏色不同的排列方案。k 15,ci 6,資料組數 2000 這種題一般很難有直接的通式,可以考慮dp。設fi,j表示,前i中顏色已經放完了,其中產生了j個不合法的空的方案數。這裡的空指...