第四題:(magic)
方案一:
暴力,四重迴圈,列舉每乙個數字的在每個位置出現的個數,然後再加起來即可
理想分數:35~45分
方案二:
我們可以用乙個數軸來表示出四個數的位置:
a b c d
__|____|_________|___|____
2i 6i+k i
從題意中我們可以得出xb~xa=2(xc~xd)
(xc~xb)÷3>xb~xa 那麼 xc~xb>3(xb~xa) 然後xc~xb=3(xb~xa)+k 最後 xc~xb=6(xc~xd)+k
設xc~xd=i 那麼 xa~xb=2i,xb~xc=6i+k;
那麼就需要列舉i 和 xc的位置和xb 的位置,因為k是拿不準的。
加答案時就只用乘另外3個數在輸入時出現的個數。
inc(a[j,1],w[i1]*w[k]*w[l]);
這樣就可以很快的算出所有方案的個數。
理想分數:80~85分
方案三:
那麼我們只能想想100分方法了。
根據上面的方法,我們可以想到乙個絕妙的n方的方法。
首先列舉i,這個免不了,然後算出字首和和字尾和。
還是剛剛那個圖:
a b c d
__|____|_________|___|____
2i 6i+k i
我們算出字尾和就是到達c最小的取值範圍8i+1.
sj 表示到j這個位置最多有多少個c和d可以存放的位置。
s[j]=s[j+1]+w[j]*w[k];
j是列舉c的位置的,k是由c算出的d的位置,w[i]就是表示i這個數在輸入時出現的次數。
這樣就可以有效的列舉出c和d在後面出現的個數。
在列舉a的位置,算出b的位置,再像上次一樣加答案:
inc(a[j,1],s[k+6i+1]*w[k]);
k就是由j算出來的b的位置,k+6i+1就是當前c最小的位置,再乘乙個b的個數。這樣就相當於85分方法的三個數相乘。
算字首和同理,用來算c和d的方案數。
**:
var
a:array[1..15000,1..4]of longint;
b,w:array[0..40000]of longint;
n,m,i,j,k,l,i1:longint;
s,s1:array[0..15001]of longint;
bz:boolean;
begin
assign(input,'magic.in');reset(input);
assign(output,'magic.out');rewrite(output);
readln(n,m);
for i:=1 to m do
begin
readln(b[i]);
inc(w[b[i]]);
end;
for i:=1 to n div 9 do
begin
fillchar(s,sizeof(s),0);
fillchar(s1,sizeof(s1),0);
for j:=n-i downto 8*i+1 do
s[j]:=s[j+1]+w[j]*w[j+i];
for j:=1 to n-8*i do
begin
i1:=j+i*2;
if (w[i1]>0)and(w[j]>0) then
begin
inc(a[j,1],s[j+8*i+1]*w[i1]);
inc(a[i1,2],s[j+8*i+1]*w[j]);
end;
end;
for j:=2*i to n-7*i-1 do
s1[j]:=s1[j-1]+w[j]*w[j-2*i];
for j:=8*i+1 to n-i do
begin
i1:=j+i;
if (w[i1]>0)and(w[j]>0) then
begin
inc(a[i1,4],s1[j-6*i-1]*w[j]);
inc(a[j,3],s1[j-6*i-1]*w[i1]);
end;
end;
end;
for i:=1 to m do
writeln(a[b[i],1],' ',a[b[i],2],' ',a[b[i],3],' ',a[b[i],4]);
close(input);
close(output);
end.
noip普及2016總結
事實上,我在去年也報了noip的普及組.奈何當年太稚嫩,不懂騙分,只有210.以上都是前話,滿滿的都是不堪回首的黑歷史.1.概述 考前算是做了比較充分的準備吧,至少在每天晚自習都會抽幾分鐘的時間複習一下 事實上功課也並沒有怎麼耽誤 然後就是臨場發揮還是較好吧,可以根據自己的能力與資料的大小寫出合適的...
NOIP 2016 普及組 海港
題目鏈結 小k是乙個海港的海關工作人員,每天都有許多船隻到達海港,船上通常有很多來自不同國家的乘客。小k對這些到達海港的船隻非常感興趣,他按照時間記錄下了到達海港的每一艘船隻情況 對於第i艘到達的船,他記錄了這艘船到達的時間ti 單位 秒 船上的乘客數ki,以及每名乘客的國籍 xi,1,xi,2,x...
2016NOIP普及組解析
第一題 買鉛筆 easy,不多說 include include include include using namespace std intmain 第二題 回文日期 也很easy,注意特判,過 include include include include int mon 13 using n...