noip2014 d2解題報告

2022-05-20 05:48:19 字數 2721 閱讀 8590

d2也挺簡單的,t1乙個二維字首和,t2乙個bfs+spfa,t3難度較大,但是**實現難度不大,而且30非常好拿。所以兩天成績=260+230=490,好菜啊qwq,往年的題都做成這個樣子……

t1:無線網路發射器選址,又是乙個模擬,只要處理下二維字首和就好,注意判斷好邊界,不要讓陣列越界

#include#include

#include

#include

using

namespace

std;

int d,n,x,y,z,ans1,ans2,xa,xb,ya,yb,sum[130][130

];//

這個題我們只需要求個二維字首和,再列舉中心就好了,注意處理好邊界

intmain()

cout

'<

}

t2:尋找道路,這個首先我們就可以想到反向建圖,選出能夠到達終點的點,然後在列舉它們,判斷是否符合條件,符合就把與它相連的所有邊建起來,這樣並不會多出能到達終點的路徑,因為會在半路中截斷,建出圖來就好辦了,跑一邊spfa就完事了

#include#include

#include

#include

using

namespace

std;

intn,m,ta1,ta2,ta3,x,y,s,e;

struct

inter[

200020],es[200020],ing[200020

];int he1[10010],ans[10010],he2[10010],he3[10010

];bool flag[10010

];inline

void bu1(int f,int

l),he1[f]=ta1;

es[++ta2]=(in),he2[l]=ta2;

}queue

qwq;

inline

void bfs(int

fi) }

}inline

void bu2(int f,int

l),he3[f]=ta3;

}inline

void

init()

}if(fl)//

如果它的蛾子能夠到達終點就建邊(就算後面有不能到達終點的後代也無所謂,因為這樣不會建邊) }}

}inline

void spfa()//

跑一邊最短路

}flag[qaq]=0

; qwq.pop();

}if(ans[e]<2139062143

) cout

<

else

cout

<

/*這個題我們可以先反向建圖,然後判斷出哪些點可以到達終點

之後再根據題目要求,將自己蛾子所有能夠直接或者間接到終點的點的所有邊接起來

這樣做並不會出現不符合題意的路徑,因為所有不應該到達終點的路徑就算多建了幾條邊,也會因為中間的點不滿足條件而最後不會聯通到終點

所以我們重新建了一張圖,之後跑個spfa就可以了

*/int

main()

t3:這是2023年最有難度的乙個題,首先我們可以轉化一下方程。

根據秦九韶演算法:

所以我們可以簡化一下計算,降低一下時間複雜度,這是第乙個優化

之後我們想一下,如果我們將方程模上乙個質數,這時如果滿足另一邊為0的時候,我們是不是可以基本看成x是方程的乙個解,當然肯定會出現錯誤,但是如果我們多模上幾個質數的時候,出錯的概率就會大大降低呢?所以我們可以多模上幾個數,這樣也避免了高精運算2333333

#include#include

#include

#include

using

namespace

std;

typedef

long

long

lo;const lo m1=99991

;const lo m2=998244353

;const lo m3=1000000007

;lo n,m,a[

110],b[110],c[110],ans,lin[1000010

];bool flag[1000010

];inline

void re(int

i)

while(s>='

0'&&s<='

9')//

取模是為了存的開

a[i]=((a[i]*10%m1)+s-'

0')%m1,b[i]=((b[i]*10%m2)+s-'

0')%m2,c[i]=((c[i]*10%m3)+s-'

0')%m3,s=getchar();

if(fl)

a[i]*=-1,b[i]*=-1,c[i]*=-1;}

inline

bool

ask1(lo x)

inline

bool

ask2(lo x)

intmain()}}

for(lo i=1;i<=m;i++)

if(flag[i])

lin[++ans]=i;

cout

;

for(lo i=1;i<=ans;i++)

cout

;}

抽空我再做15年的報告,畢竟15年的題還是很有難度的……

noip2014提高組 Day2 解題報告

t1無線網路發射選址 題解 直接列舉安裝地點即可。include includeusing namespace std int n,m,d,x,y,sum long long a 300 300 maxx,z int main for int i 0 i 128 i for int j 0 j 12...

NOIP提高組2014 聯合權值 解題報告

lgoj p1351 聯合權值 一看到我們就要反應出來 g是一顆樹。兩個點的距離為2,就能產生聯合權值?那我列舉中間點不就好了2333 乙個中間點的最大聯合權值就是它所連的點中權值最大的兩個點 如果它所連只有乙個點,自然不產生權值 考慮它的所有的聯合權值之和怎麼算 第k kk個點為中間點的所有聯合權...

NOIP 2016 Day2 解題報告

by 毒液哥 注意到n,m 2000.而我們的問題是對範圍內所有組合數統計能被k整除的個數,所以我們需要得到範圍內所有的組合數模k的餘數。要注意j i,不要計算多餘的0.用楊輝三角形遞推求出組合數,再用字首和處理即可。每次用線性時間找到最大值。切成兩條。把其他所有的加上q.記得輸出。35分演算法中有...