NOIP2018複習 tty的數列(思考題)

2021-08-31 00:07:26 字數 1740 閱讀 7590

輸入輸出

輸入樣例複製

input 1:

6 31 1 1 0 0 0

input 2:

6 31 1 0 1 0 0

input 3:

6 311 8 2 1 3 9

輸出樣例複製

output 1

1 1output 2

1 0output 3

11 1

說明題解:認真審題  連續子串行 

對於or,顯然or的數越多越大,所以整個序列or在一起就是答案 

對於and,將每個數字轉為二進位制,對於每一位,若前面包括自己有》=k個連續的1,則該位可為1

例子,當k=2

110010

011101

101110

最終 110010     110010     

011101     011101

101110     101110                      16            12

選前兩個

const

inf='1230.in';

ouf='1230_2.out';

maxn=1000000;

var  a,f:array[0..maxn,0..33]of longint;

val:array[0..33]of longint;

n,k,ymw,ans1,ans2,sum:longint;

i,j:longint;

function max(a,b:int64):longint;

begin

if a>b then exit(a) else exit(b);

end;

procedure init;

var  i,j:longint;

x:int64;

begin

readln(n,k);val[1]:=1;

for i:=2 to 33 do

val[i]:=val[i-1]*2;

for i:=1 to n do

begin

read(x);

ans1:=ans1 or x;

while x>0 do

begin

inc(f[i,0]);

f[i,f[i,0]]:=x mod 2;

x:=x div 2;

end;

ymw:=max(ymw,f[i,0]);

end;

for i:=1 to n do

for j:=1 to ymw do

if f[i,j]<>0 then f[i,j]:=f[i-1,j]+1;

end;

begin

// assign(input,inf);reset(input);

// assign(output,ouf);rewrite(output);

init;

for i:=k to n do

begin

sum:=0;

for j:=1 to ymw do

if f[i,j]>=k then sum:=sum+val[j];

ans2:=max(ans2,sum);

end;

writeln(ans1,' ',ans2);

//close(input);close(output);

end.

NOIP2018複習 A(樹形DP)

時間限制 1000ms記憶體限制 256000kb 題目描述 lyh童鞋的手辦非常多,以至於他專門種了一棵樹來放置手辦 為了展現自己的收藏lyh決定從收藏樹上選取一些手辦展示 已知lyh的每個手辦都有不同的美麗值,第i個節點上有乙個美麗值為ai的手辦。lyh認為一種選取手辦的方案是合法的當且僅當選出...

Noip2018 填數遊戲

耳熟能詳,就不多說了 對於乙個不會推式子的蒟蒻,如何在考場優雅地通過此題 手玩樣例,發現對於 n 1 ans 2 m 對於 n 2 ans 4 times 3 或者乾脆打出 n,m le 3 的表 肉眼觀察法,發現似乎有 f n,m 1 3f n,m 但這並不是正確的,但如果你僅僅是這麼認為了,你仍...

NOIP2018複習 射擊(堆 貪心)

時間限制 2000ms 記憶體限制 65536kb 題目描述 有問題,找副連,無聊的時候當然也可以找他啦。小w找到了他的叔叔 東廠廠長 宇宙超級無敵老ws yy。他們叔侄兩個商量之後決定用彈弓打破社群裡的一些窗戶,但是彈弓每秒只能徹底打破一扇窗戶。而且如果某戶窗戶的主人回來了的話,他們就不能進行破壞...