2017 12 02 NOIP提高組 模擬賽A組

2022-08-17 03:57:23 字數 2177 閱讀 8935

t1 3555【gdkoi2014模擬】樹的直徑

t2 3542【清華集訓2014】氣泡排序

t3 3486【noip2013模擬聯考10】道路改建(rebuild)

樹直徑的乙個性質,兩棵樹合併,形成新的樹的直徑的兩個端點為原樹中的四個端點之二。

可以用反證法證明。用此性質本題就變成了lca裸題了

#include#include#include#include#include#include#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fd(i,a,b) for(int i=a;i>=b;i--)

#define rep(i,x) for(int i=head[x];i;i=next[i])

#define mem(a,x) memset(a,x,sizeof(a))

typedef long long ll;

typedef double db;

using namespace std;

inline int max(int x,int y)

inline int min(int x,int y)

inline int read()

const int n=200000+50;

int to[n<<1],next[n<<1],tot,head[n],dep[n],go[n][17],s,t,mx,m,x,son;

void add(int x,int y)

void dfs(int x)

void init_lca()

int lca(int a,int b)

return 0;

}

一看是清華集訓題就慌了,但仔細一想還是十分簡單的。

若乙個數之前有t個比它要大,那麼前t輪中每輪它會往前移1個位置,之後便不再會往前移了。

考慮到交換次數=前移次數,可據此求出最大的輪數x使得做了x輪冒泡後交換次數剛好不超過k。

那些t>=x的數的位置前移了x,所有t#include#include#include#include#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fd(i,a,b) for(int i=a;i>=b;i--)

#define rep(i,x) for(int i=head[x];i;i=next[i])

#define mem(a,x) memset(a,x,sizeof(a))

typedef long long ll;

typedef double db;

using namespace std;

inline int max(int x,int y)

inline int min(int x,int y)

inline int read()

const int n=1000001;

int a[n],upper[n],ans[n],sa[n],tr[n],n;

inline int lowbit(int x)

inline void add(int x,int xx)

inline int sum(int x)

int main()

sx=0;

fo(i,1,n) sx+=(ll)min(r+1,upper[i]);

ll m=k-sx;

if(m>0)

sx=0;

fo(i,1,n) sx+=(ll)min(r,upper[i]);

m=k-sx;

int p=0;

fo(i,1,n)

if(upper[i]>r) ans[i-r]=a[i];

else p++,sa[p]=a[i];

sort(sa+1,sa+1+p);

p=0;

fo(i,1,n) if(ans[i]==0) p++,ans[i]=sa[p];

for(int i=1;ians[i+1])

}fo(i,1,n-1) printf("%d ",ans[i]);

printf("%d\n",ans[n]);

return 0;

}只能憑印象寫一下題解了(記性不好,算了 等oj好了再補齊吧)

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...