vijos訓練之 星辰大海中閃爍的趣題

2022-05-29 06:24:11 字數 2930 閱讀 5095

看到難度普遍7-9就感覺很勁…再加上doc出品,於是果斷入坑。由於知識性內容還沒有學完,只能慢慢刷了。

這sb題居然智障wa了兩次….

由於是回文串只要列舉前半段,然後瞎幾把測試素數就好了。

順便學習一波miller-rabin的二次探查。

複雜度o(n

√slgn

),s為測試次數。

#include 

using

namespace

std;

long

long power(long

long a, long

long n, long

long mod)

bool miller_rabin(long

long n)

if (x != 1) return

0; }

return1;}

long

long rev(long

long a)

long

long ans[100005];

int top = 0;

int main()

if (i >= power(10, len, long_long_max)-1) len++;

}sort(ans+1, ans+top+1);

top = unique(ans+1, ans+top+1)-ans-1;

for (int i = 1; i <= top; i++) printf("%lld\n", ans[i]);

return

0;}

以前寫線段樹查詢從來都是直接返回答案…做了這題才發現可以返回乙個完整的節點資訊。

就是線段樹維護總和,最大子段和,左起最大子段和,右起最大子段和。

複雜度o(n

lgn)

#include 

using namespace std;

const int maxn = (1

<<19)+2;

struct node

friend bool operator == (const node &a, const node &b)

} tree[maxn*2];

int a[maxn], n, m;

#define nil tree[0]

node link(const node &l, const node &r)

void build(int nd, int l, int r)

else

}void dfs(int nd, int tab = 0)

void update(int nd, int

pos, int dat)

else

}node query(int nd, int l, int r)

int main()

else

if (opt == 2) else dfs(1);

}return

0;}

一開始以為是反轉思考了好久,後來才發現只是按下去。

最小割經典建圖:s→

rowc

ol→t

row→

col,

ifth

erei

ssom

ethi

ngat

(row

,col

)正確性是顯然的,複雜度o(

跑得過)

貌似用二分圖匹配也可以?但我不會匈牙利那一套理論。

#include 

using

namespace

std;

const

int maxn = 50005, maxm = 5000005;

struct node edge[maxm];

int head[maxn], top = 0;

void push(int i, int j, int k)

, head[i] = top;

++top, edge[top] = (node) , head[j] = top;

}int vis[maxn], bfstime = 0;

int lev[maxn], s = 50001, t = 50002;

queue

que;

bool bfs()

} return vis[t] == bfstime;

}int dfs(int nd, int maxf = 233333333)

if (maxf) lev[nd] = -1;

return ans;

}int dinic()

int n, m;

char str[105];

int main()

cout

<< dinic() << endl;

return

0;}

變得難起來了…

構造問題,由於有二叉樹計數考慮用卡特蘭數。然後瞎幾把搞【霧】。

複雜度o(lg

n)。因為卡特蘭數是指數增長,其反函式是對數增長。

#include 

using

namespace

std;

// c : h(n)=h(n-1)*(4*n-2)/(n+1);

long

long h[20];

void work(int n, long

long k, bool out_side = 1) // n個節點中編號為k的

}if (!out_side) putchar(')');

}int main()

return

0;}

Vijos訓練計畫 1304回文數

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 1353 st...

Linux快速入門開啟你的學習之道 星辰大海

相信看到這篇文章的你一定是想要學習linux,或者已經在學習linux的人了,那我們就可以一起 一下,學習linux如何快速入門呢?首先,希望大家弄清楚自己為什麼要學習linux,有的人是因為興趣,有的人是因為linux比較好找工作,興趣驅使的那部分人找好方法學習linux就差不多了。另一部分為了工...

vijos 1770 大內密探(樹形dp 計數)

不重不漏地設計狀態才能正確的計數qaq 雖然可能最優化是正確的,但是不能保證狀態不相交就是作死。之前設的狀態錯了。應該設f i 0 表示i點不取且至少有乙個兒子取,且保證i點被覆蓋 f i 1 表示i點取兒子任意,且保證i點被覆蓋 f i 2 表示i點不取且i點的兒子也不取,保證i點不被覆蓋!即留給...