XJOI NOIP2016提高組衝剌題1

2021-07-23 23:09:08 字數 3701 閱讀 1903

第一次打學軍的比賽,不知道不要檔案輸入輸出,結果順利爆零

由於版權問題在此不放入題面

題意:有乙個n∗

m(n∗

m≤105

) 的礦場,對於每一列,可以選擇往下挖 k(

1≤k≤

m)層,求最大平均價值。

開啟之前以為noip肯定會有送分題的,看到題直接懵了……

這題應該沒有不超綱的做法,只能分數規劃。

結果我eps設太小tle了……

題解:01分數規劃

**:

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

const

int inf = 2147483647;

const

int n = 100010;

const ld eps = 0.00001;

int n,m,k;

double a[n];

inline

void init(int &x)

ld f(ld k)

return s;

}int main()

if (t > eps) l = mid;

else r = mid;

}printf("%.4lf\n",double(l));

return

0;}

題意:給出兩個1∼

n(n≤

105) 的排列,將其一上一下放置,在相等的數間連一條線,求乙個元素最多的連線集合的元素數目,使得該集合中連線兩兩相交。

題解:很經典的模型,將第乙個陣列中的數改為其在第二個陣列中出現的對應位置,然後用o(

n⋅lo

g2n)

的時間做一遍最長下降子串行

**:

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

const

int inf = 2147483647;

const

int n = 100010;

int n;

int a[n],mi[n];

struct aaa1[n],a2[n];

inline

void init(int &x)

bool cmp(aa x,aa y)

int main()

if (l == k) mi[++k] = a[i];

else mi[l + 1] = max(mi[l + 1],a[i]);

}cout

<< k << endl;

return

0;}

題意:給定乙個有n(

n≤105

) 個節點的樹形迷宮,且每個節點最多只能容納乙個人,入口為

1 號節點。每個人行走的策略是優先向下走,若有多條路則選擇編號最小的節點繼續前進,若沒有路則在當前房間停下。

現在有兩種操作:1.從入口進入

x個人,依次按策略前進,要求輸出最後乙個人停下時的位置。2.讓處於

x 號節點的人離開,其他人依次按策略補上,問此次操作後有多少人移動了。

操作總數m≤

105。題解:由於第二種操作每次只能取出乙個人,所以通過第一種操作進入樹的人總數一定不大。很容易想到的是,進入各節點的順序是固定的,因此可以用一遍dfs求出這個順序,然後用乙個小根堆維護未被佔據的節點,從而實現第一種操作。對於第二種操作,實際上等價於將該節點最遠的被佔據的祖先節點設為未佔據,並輸出深度差,用樹上倍增可以很容易地實現。

**:

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

const

int inf = 2147483647;

const

int n = 100010;

int n,m,times = -1,sq;

int conn[n],num[n],la[n],depth[n];

int a[n << 1],nextt[n << 1];

int fa[n][30];

int power[30];

bool inque[n];

struct aaed[n << 1];

class heap

int top()

void pop()

}}q;inline

void init(int &x)

bool cmp(aa x,aa y);

inline

void ed(int x,int y)

void dfs(int now,int last,int dep)

void op1(int x)

void op2(int x)

if (l != r)

inque[num[l]] = 1;q.push(num[l]);printf("%d\n",depth[x] - depth[l]);

}int main()

return

0;}

題解已更新。

距離複賽還剩四周,繼續努力!

NOIP提高組2016總結

大翻車!300 8 30 9 00,照常看題,思考。9 00 9 15,搞定第一題,很水。9 15 9 45,思考第二題,我考慮用分深度來處理,想出個個玄學暴力,但剛開始算錯了時間複雜度,於是自信滿滿地開打 9 45 10 50,打第二題,被一些細節問題搞了很久 打了幾乎乙個小時。10 50 11 ...

NOIP2016提高組總結

這次noip可以用幾個字來形容 浪的飛起,頹的不行。中午從校門出發,在車上睡了半個車程。4 00左右,霧比較大,遠處的小蠻腰若隱若現。你好,廣州。5 00,symbol叫我們去看考場,結果被拒在門外,然後大家都散了。我與其它幾位小夥伴匆匆吃完飯,回到酒店,該看電視看電視,中途開會,提醒我們一些注意事...

NOIP2016 提高組 總結

這是倒數第三次noip了。今年我初三。去年的傷痕還未褪去,我在比賽前意識到,當務之急其實是鞏固基礎而非深究一些難題。於是賽前兩周,我認真讀了白書的前面部分,尤其重點練習了dp。dp作為基礎演算法之一,其靈活性極高,所以可以出得很難,也是各種比賽的寵兒。練好dp是尤為重要的。賽前好幾場模擬賽都做得很爛...