隊內訓練賽一

2021-07-29 20:31:26 字數 2978 閱讀 7766

記錄乙個菜逼的成長。。

ps:因為備戰省賽,並沒有什麼難的演算法和資料結構。。

a:hdu2181 哈密頓繞行世界問題

簡單的dfs,每個城市只有三條邊直接搜尋即可。

#include 

using

namespace

std;

#define all(v) (v).begin(),(v).end()

#define cl(a,b) memset(a,b,sizeof(a))

#define clr clear()

#define pb push_back

typedef

long

long ll;

const

int inf = 0x3f3f3f3f;

const

int maxn = 20 + 10;

int g[maxn][maxn],vis[maxn];

int ans[maxn],cas = 1;

void dfs(int st,int x,int cnt)

printf(" %d %d\n",x,st);}}

vis[x] = 1;

ans[cnt] = x;

for( int i = 1; i <= 20; i++ )

}vis[x] = 0;

}int main()

}int m;

while(~scanf("%d",&m) , m != 0)

return

0;}

b:hdu2102 a計畫

基礎的三維bfs,求最短路徑。

只是這裡有個坑,兩層相對的位置都是 『#』,還有每次傳送的時候,記得把步數也記錄就可以了。

#include 

using

namespace

std;

#define all(v) (v).begin(),(v).end()

#define cl(a,b) memset(a,b,sizeof(a))

#define clr clear()

#define pb push_back

typedef

long

long ll;

const

int inf = 0x3f3f3f3f;

char g[5][20][20];

int vis[5][20][20],n,m,t;

int dx = ,dy = ;

struct node

node(int xx,int yy,int zz):x(xx),y(yy),z(zz){}

};void bfs(int x,int y,int z)

}if(!cnt)

}}int main()}}

bfs(0,0,0);

if(!vis[tz][tx][ty])

else

}return

0;}

c:hdu5695 gym class

依據題目意思很容易想到拓撲排序。

只是多了個條件,每次要找到前面最大的,使得最後結果最大。那麼貪心一下,每次入度為0的點,使值大的先輸出即可。可用優先佇列替換掉原先的佇列來維護。

#include 

using

namespace

std;

#define all(v) (v).begin(),(v).end()

#define cl(a,b) memset(a,b,sizeof(a))

#define clr clear()

#define pb push_back

typedef

long

long ll;

const

int inf = 0x3f3f3f3f;

const

int maxn = 100000 + 10;

vector

g[maxn];

int d[maxn],n,m;

ll topsort()

ll ans = 0;

int mn = inf;

while(!q.empty())}}

return ans;

}int main()

printf("%lld\n",topsort());

}return

0;}

d:hdu5690 all xf(

x,m)

modk=c

f(x,m)=

10m−1

9∗x .

原式就轉換為10m

−19∗

xmodk=

c 但是我們不能保證

9 跟

k一定互質

所以轉換為(10

m−1)

∗xmod9k=

9c如果互質則可以轉換為(10

m−1)

∗xmodk=9

c 那麼直接快速冪計算即可。

#include 

using

namespace

std;

#define all(v) (v).begin(),(v).end()

#define cl(a,b) memset(a,b,sizeof(a))

#define clr clear()

#define pb push_back

typedef

long

long ll;

const

int inf = 0x3f3f3f3f;

ll power(ll a,ll b,ll c)

return ret;

}int main()

return

0;}

e:見這裡

f:見這裡

NUC 2015 秋 隊內訓練賽 第一場

題意 有乙個n行,m列的棋盤,在棋盤上面放置黑 b 和白 w 間隔的棋子,另外棋盤某些地方有缺損,不能放置棋子,用 表示。演算法 這裡我採用直接模擬的方式,類似於小學生練字用的字帖,我先生成乙個標準的bwbw間隔的棋盤,然後用輸入的棋盤,直接對比,如果是 則直接輸出,標準棋盤的b 或者是w,否則輸出...

訓練 9 13 訓練賽

a.hdu 6230 乙個合法的子串 s 3n 2 滿足條件即1 2n 1 為以n為回文中心的回文串,n 3n 2為以2n 1為中心的回文串。故我們可以通過尋找回文中心對,來判斷相應合法子串的個數。利用manacher求出每個位置的最長回文半徑,則若i,j滿足條件 i j 則應有 p i geqsl...

訓練賽 詠歎

安師大附中訓練題目 給定乙個1到n的排列a,對其進行氣泡排序 counter 0 while a不是公升序的 counter counter 1 for i 1 to n 1 if a i a i 1 then swap a i a i 1 endifend forend while那麼經過幾輪排序...