第一次打學軍的比賽,不知道不要檔案輸入輸出,結果順利爆零。
由於版權問題在此不放入題面
題意:有乙個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是尤為重要的。賽前好幾場模擬賽都做得很爛...