NOIP2017賽前模擬 4 總結

2022-05-23 13:06:08 字數 3430 閱讀 3579

給定n個整數(n<=1000000),按照撲克牌對子(x,x)或者順子(x,x+1,x+2)打出牌···問最多可以打出多少次對子或者順子?牌的大小<=1000000

給定乙個n*m的格仔(n,m<=1000000000),已知乙個球從(1,1)處出發向左下方滾出··每次遇到邊界則旋轉90度**(類似與鏡面反射)直到滾到乙個角落停止···途中球每次經過乙個方格則會將方格染色(包括第乙個方格),問只被染一次色的方格有多少個?

已知有n個盒子(n<=200),每個盒子有長寬···乙個盒子可以放入乙個長和寬都不小於它的盒子(可以不斷巢狀),乙個盒子裡只能套一層盒子例如1*2的盒子只能套乙個1*1的盒子··而不能套兩個··只能乙個1*1的盒子套在另乙個1*1的盒子裡,套完後盒子的占地面積是套再最外面的盒子的面積之和··問最小占地面積是多少?

額··考試的時候腦子抽了··貪心貪錯了··正解其實很簡單··

如果某數字的牌小於2張直接出對子或者不出···如果大於3張的話我們可以考慮一直打對子直到只剩下一張或者兩張··然後判斷是否可以和之前兩張牌打成順子就可以了··因為對於打順子這一次和打對子對答案的貢獻是一樣的··但打順子的話我們會剩一張牌··這一張牌可能與後面的牌組成順子從而對答案有多餘貢獻····

**:

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=1e6+5

;inline

intr()

int n,maxx=0

,card[n];

intmain()

cout

return0;

}

考試的時候看到這道題直接慫了····下來想想其實如果認真分析還是有可能做對的···哎····

具體過程由於我語文差實在用語言描述不出來··這裡偷偷懶不寫了··

**:

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

long

long

r()inline

long

long

get(long

long a,long

long

b)int

main()

return0;

}

這道題還是比較容易想到的··

第一種方法是二分圖匹配··左邊的點向右邊能夠覆蓋它的盒子連邊···然後如果左邊的盒子被匹配到了說明它被乙個盒子覆蓋了··因此想到我們要首先覆蓋那些面積大的盒子··

所以在跑匈牙利演算法時優先匹配那些面積大的盒子即可··

第二種方法其實和第一種本質是一樣的··只是實現方式不同··和二分圖一樣每個盒子拆成左右兩部分··建邊方式和第一種一樣··流量為1費用為左邊盒子的面積··然後s向左邊的點連流量為1費用為0的邊··t向右邊的點連流量飛1費用為0的邊然後跑一邊最大費用··用所有盒子的總面積減去最大費用(其實就是被覆蓋的盒子的面積)就是答案

**1:

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=405

;struct

node

bx[n];

inline

intr()

intn,ed[n][n],ans,belon[n];

bool

visit[n];

bool

cmp(node a,node b)

inline

bool

get(int

x) }

return

false;}

intmain()

for(int i=n-1;i>=1;i--)

cout

return0;

}

**2:注意memset時附上的值不能為負數

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

queue

que;

const

int n=100005

;const

int inf=0x3f3f3f3f

;int first[n],next[n],go[n],cost[n],rest[n],tot=1

;int

dis[n];

bool

visit[n],work[n];

struct

node

}bx[n];

inline

intr()

intn,src,des,ans;

inline

void comb(int a,int b,int v,int

w)inline

bool

cmp(node a,node b)

inline

bool

spfa()}}

} return dis[des]!=-inf;

}inline

int dinic(int u,int

flow)

work[u]=true;

int v,e,res=0

,delta;

for(e=first[u];e;e=next[e])

}}

return

res;

}inline

void

getmax()

intmain()

for(int i=1;i<=n;i++) comb(src,i,1,0

);

for(int i=1;i<=n;i++) comb(i+n,des,1,0

); getmax();

cout

return0;

}

NOIP2017賽前經驗總結

開考前還有半個小時左右的自由時間,在這段時間裡可以先把庫檔案,讀入優化,對拍打了,節省時間。1.考試開始時可以先把第一題做了,第二三題一定都要讀,先把暴力打了 就算知道正解到時候對拍也要用 再看是否想得到正解,如果一道題半個小時都想不到正解就跳過,不要浪費時間。2.對於每道題,一定要看清楚它的空間與...

NOIP2017模擬11 2 總結

今天還是換機房繼續模擬 坐了昨天用過的電腦,沒怎麼花時間測試環境 一眼掃過去 t1這不是原題麼 逗我玩呢 拓撲序 heap 好像5分鐘就打完了。我說要不不拍了吧 看向旁邊xdl大爺 一副 反正我拍了 的樣子。好吧,花了10分鐘弄個拍,一拍就過 然後出資料的時候發現漏掉 1的情況,還好。看t2 似乎乙...

NOIP2017提高組模擬賽4 (總結)

這道題就是很簡單的bfs,可以觀察到n變化到m是近似成倍增長的。其實從最小到最大的變化也就只有30次而已。include include include typedef long long ll using namespace std const int maxl 100 const int oo ...