暑假第二十六測

2022-05-29 05:00:11 字數 3593 閱讀 2693

今天又考的奇差

題解:第一題;

這麼簡單一道題我想了好久,智商實在是下線了;

#includeusing

namespace

std;

intmain()

view code

第二題:我們發現e的長度很小,我們可以在上面做文章,其實每個位置對應的%strlen(e)都是一樣的;我們用樹狀陣列維護rt[pos][len][yu][id]表示1到pos每次跳len,當前位置%len = yu的id字元有多少個;對於乙個字串,查詢就是rt[r][len][(l + i - 1) % len][a[i]],修改就把長度列舉一下;

這道題我開始想到每次跳len, 維護乙個字首和,但沒有想到樹狀陣列,暴力修改和我直接暴力複雜度差不多;如果想到餘數這一維就好了

#includeusing

namespace

std;

const

int m = 1e5 + 10

;char

s[m], ch[m];

int rt[m][11][10][4

], n, a[m], b[m];

inline

intget(charx)}

inline

int lowbit(int x)

void add(int pos, int len, int yu, int id, intd)}

int query(int pos, int id, int k, int

yu)

return

ret;

}void

init()

}void add(int pos, int id, int

d)int

main()

else

printf(

"%d\n

", ans);}}

}

view code

第三題:

線段樹存樹邊,維護最大值更新非樹遍,用非樹邊更新線段樹上的限制;

#includeusing

namespace

std;

const

int m = 2e5 + 10

;const

int oo = 0x3f3f3f3f

;#define ex(i, u) for(int i = h[u]; i; i = g[i].nxt)

#define ls nd->ls, lf, mid

#define rs nd->rs, mid + 1, rg

int fa[m], ans[m], n, m, h[m], top[m], siz[m], son[m], dep[m], in

[m];

intidc, tot, seq[m], line[m];

bool

intree[m], fg;

struct edgeg[m];

struct edgeg[m << 1

];void add(int u, int v, int

i)bool

cmp(edge a, edge b)

bool

cmp_id(edge a, edge b)

int find(int

x)void uni(int u, int

v)struct

node;

void modify(int l, int r, int d, node * nd, int lf, int

rg);

struct

node

}inline

void

up()

}pool[m

<< 2], *tail = pool, *root;

node * build(int lf = 1, int rg =n)

else

return

nd;}

int query(int l, int r, node * nd = root, int lf = 1, int rg =n)

}void modify(int l, int r, int d, node * nd = root, int lf = 1, int rg =n)

else

}void getdown(node * nd = root, int lf = 1, int rg =n)

nd->down(lf, rg);

int mid = (lf + rg) >> 1

; getdown(ls);

getdown(rs);

}void dfs(int u, intf)}

void dfs2(int u, int

tp)}

void modify(int u, int v, int

d)

if(dep[u]

if(in[u] != in[v])modify(in[v] + 1, in

[u], d);

}int query(int u, int

v)

if(dep[u]

if(in[u] != in[v])ans = max(ans, query(in[v] + 1, in

[u]));

//if(fg)printf("%d %d %d\n", u, v, ans);

return

ans;

}int

main();

}sort(g + 1, g + 1 +m, cmp);

for(int i = 1; i <= n; i++)fa[i] =i;

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

line[

1] = 0

; dfs(

1, 0

); dfs2(

1, 1

);

//for(int i = 1; i <= n; i++)printf("%d %d %d\n", i, dep[i], top[i]);puts("");

sort(g + 1, g + 1 +m, cmp_id);

root =build();

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

getdown();

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

printf(

"%d

",ans[i] == oo ? -1

: ans[i]);

}

暑假第二十測

題解 第一題 這道題最先想到的就是貪心,但是純貪心明顯是不對的,如 2 2 1 3 3 貪心結果為2 2 133 但實際是2 21 3 3 所以這樣是不對的。那要怎麼做呢.考慮用dp.階段應該是明顯的就是第幾個數,我們還是要用到貪心的思想,就是保證在最後面的合起來的數盡可能的小 我們用f i 表示到...

第二十六講 深入委託

主要內容 1.我們忽略的事件與委託 有關於視窗載入的系統預定義的原 的理解 2.定義,使用委託 分兩步1.定義要使用的委託 2.建立例項 3.實踐 說媒,娶媳婦的標準 4.多播委託 1.可以讓乙個委託去呼叫一系列的方法 2.採用 增加到執行序列,使用 從序列移除 5.匿名方法 沒有方法簽名,只有方法...

第二十六天總結

求多源 無負權邊的最短路 floyd演算法 floyd warshall演算法是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshall演算法的時間複雜度為o n3 空間複雜度為o n2 最小生成樹 給定乙個無向圖,...