NOIP2010 提高組合集

2022-05-01 20:33:11 字數 1882 閱讀 8790

noip 2010 提高組合集

t1 機器翻譯

模擬題,用乙個棧模擬,桶記錄即可。

#include #include #include #include #include #define n 1010 

using namespace std; mapmp; int que[n],a[n]; int l,r;

int main()}}

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

return 0;

}

t2 關押罪犯

開始的時候這個題特別容易做成直接模擬,然後記錄帶敵人集合並查集的最大值之類的錯誤做法。

這個題我們將所有的關係按照怨氣值排序,緊接著我們只要逐一盡量滿足即可。第乙個不能滿足的就是答案。

#include #include using namespace std;

struct node f[100010];

int n,m,a[20005],b[20005],i;

inline bool cmp(const node &x,const node &y)

int find(int x)

inline void merge(int x,int y)

inline bool check(int x,int y)

int main()

else

if(!b[f[i].y]) b[f[i].y]=f[i].x;

else }}

return 0;

}

t3 烏龜棋

一眼dp的題。關鍵在於狀態,開始的時候我設成了f[all][i][j][k][l],表示一共走了all,每個卡片分別用了i,j,k,l個。然後自信的認為最後一維可以卡掉,然後就不會優化了。

之後開心的開題解,以為對於那個東西可以有什麼好的方式優化,結果... ...tm我們可以把第一維壓掉...轉移顯然。

#include #include #include #include using namespace std; int num[400];

int f[41][41][41][41]; int g[5];

inline void fix(int &x,int y)

int main()

printf("%d\n",f[g[1]][g[2]][g[3]][g[4]]);

return 0;

}

t4 引水入城。

聯賽中還算友好的爆搜。我們對於每乙個接受格仔開始bfs,易於發現每個發射格仔能匹配的肯定是一條線段,之後dp就行了。

#include #include #include #include using namespace std;

#define n 510

#define nx x+xx[i]

#define ny y+yy[i]

int l[n][n],r[n][n];

int high[n][n];

int n,m;

bool vis[n][n];

int xx[4]=;

int yy[4]=;

int qx[n*n],qy[n*n];

inline char nc()

int rd()

void dfs(int x,int y)

}int main()

}if(flag)

int left=1;

while(left<=m)

puts("1");

printf("%d",cnt);

}

NOIP 2010提高組題解

這是同機房一位巨佬在ak ioi之後發表的感言。為了學習他的這種精神 我太菜了,但我也想像他一樣ak ioi qaq 這篇題解就誕生了。戰車被馬拉著 直接模擬。注意入隊的時候打上標記,出隊的時候清楚標記,每次查詢的時候直接o 1 o 1 o 1 查詢標記即可。時間複雜度o n o n o n 一直在...

NOIP2010提高組 引水入城

這題。以前打的,很暴力的bfs include include using namespace std int a 502 502 ll 502 rr 502 data 300001 2 bool bz 502 502 int temp,n,m const int way 5 2 void bfs ...

NOIP2010 提高組 關押罪犯

s 城現有兩座監獄,一共關押著 n 名罪犯,編號分別為 1 n 他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為 c 的罪犯被關押在同一監...