2016長樂夏令營 Day4

2021-07-14 21:17:21 字數 3944 閱讀 4675

t1:

模擬。。開一排const char

#include#include#include#include#include#include#include#include#includeusing namespace std;

const char n0[5][3] = ;

const char n1[5][3] = ;

const char n2[5][3] = ;

const char n3[5][3] = ;

const char n4[5][3] = ;

const char n5[5][3] = ;

const char n6[5][3] = ;

const char n7[5][3] = ;

const char n8[5][3] = ;

const char n9[5][3] = ;

char ch[200];

int k,s;

void work(int i,int t)

else if (t == 1)

else if (t == 2)

else if (t == 3)

else if (t == 4)

else if (t == 5)

else if (t == 6)

else if (t == 7)

else if (t == 8)

else if (t == 9)

for (int l = 0; l < s; l++) printf(" "); }

int main()

printf("\n");

} else

for (int l = 0; l < k; l++)

printf("\n");

}} return 0;

}

t2:

可以發現,無論這兩個函式按什麼順序復合,始終是2^k*x + 2^k-1的形式,而k <= 30w,列舉一遍取最優即可

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const ll mo = 1000000007ll;

const int maxn = 1e5 + 10;

ll n,k1[maxn],b1[maxn],k2[maxn],b2[maxn];

int f[maxn*3],bo[maxn*3];

int main()

int ans = ~0u>>1;

ll mi = 2;

for (int i = 2; i <= 300000; i++)

cout << ans;

return 0;

}

t3:

先bfs算出每個人跑向各個洞口所需的時間設為t,把每個洞口拆成t個點,每個人向對應洞口的第t到t個點連邊,最後一遍最大流即可

現場沒寫出來,寫的時候每個人沒有連t+1到t的點

#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 200;

const int maxm = 3e6 + 30;

const int cx[4] = ;

const int cy[4] = ;

struct p

};struct e

}edgs[maxm*2];

char p[20][20];

int ans,n,m,t,h,d,dis[20][20],ti[maxn][maxn],hx[maxn],hy[maxn],dx[maxn],dy[maxn]

,cur,tot,tail[maxm],dn[maxn][maxn],l[maxm],last[maxm];

bool vis[maxm];

queue q;

void add(int x,int y,int w)

bool bfs()

} return l[tot];

}int dicnic(int x,int a)

} return flow;

}int main()

if (p[i][j] == 'p')

} }tot = h;

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

for (int j = 1; j <= t; j++)

dn[i][j] = ++tot;

++tot;

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

for (int j = 1; j <= t; j++)

add(dn[i][j],tot,1);

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

} for (int j = 1; j <= d; j++)

if (dis[dx[j]][dy[j]] < ~0u>>1)

for (int l = dis[dx[j]][dy[j]]; l <= t; l++)

add(i,dn[j][l],1); }

while (bfs())

cout << ans;

return 0;

}

t4:最小生成樹+lca,模板題

寫的時候存邊的陣列沒乘2。。。為了長樂的老爺機沒有用vector的後果

#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 3e4 + 10;

struct e

e(int _x = 0,int _y = 0,int _w = 0)

}edgs[maxn*10];

int cur,ans,n,m,f[maxn],fa[maxn][20],cost[maxn][20],

tail[maxn],to[maxn],v[maxn],from[maxn],l[maxn];

int fat(int x)

void add(int x,int y,int w)

void dfs(int x)

for (int i = tail[x]; i; i = from[i])

}void lca(int p,int q)

if (p == q) return;

for (int j = log; j >= 0; j--)

if (fa[p][j] != fa[q][j])

ans = max(ans,cost[q][0]);

ans = max(ans,cost[p][0]);

}int main()

sort(edgs,edgs + m);

for (int i = 0; i < m; i++)

} l[1] = 1; dfs(1);

int t; cin >> t;

while (t--)

return 0;

}

2016長樂夏令營 Day9

t1 帶權並查集。每個約束看做一條x連向y的邊,邊權為x y c 對於乙個x,可能有多個y與他有關係,間接可以算出y與y 的關係,那麼邊權就記為y y 每次加入條件,就看看是否衝突 細節詳見 據說正解是差分約束?苟蒻是真不會。include include includeusing namespac...

夏令營day6總結

早上在lpq神犇題解的啟示下,過了字串t5。然而還剩t7要用trie,那就先滾去刷trie的題咯。剛要敲trie模板的時候lzh來了,給我們講了網路流。lzh今天講的是最大流問題和edmonds karp演算法,感覺速度太快有點懵逼,還跟yhf去問了zzr為什麼要有反向弧。感覺自己有點笨,還是不太理...

2016常州一中夏令營Day2

小 w 學數學 問題描述 為了測試小 w 的數學水平,果果給了小 w n 個點,問他這 n 個點能構成的三角形個數。輸入格式 第一行乙個整數 n,代表點數。接下來 n 行,每行兩個非負整數 x y,表示乙個點的座標。輸出格式 乙個非負整數,即構成三角形個數。輸入輸出樣例 tri.in 5 0 01 ...