給定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 ...