1806做題記錄 I

2022-08-05 00:57:13 字數 4415 閱讀 8772

bzoj5340/luogu p4564 [ctsc2018] 假面

概率與期望、動態規劃

code:

1 #include2 #include3 #include4

#define clr(x) memset(x,0,sizeof(x))

5#define mod 998244353

6#define mn 203

7using

namespace

std;

8 inline int

in()

14int

f[mn][mn],g[mn],p[mn],res[mn],pos[mn],m[mn],inv[mn];

15int

n,q,k,op,ps,u,v,ans;

16 inline int qpow(int x,int

k)return

res;22}

23 inline void dp(int x,int

v)28 inline void

query()

42 }else

46 res[i]=(1ll*res[i]*(mod+1-f[pos[i]][0]))%mod;47}

48for (int i=1;i<=k;++i) printf("

%d ",res[i]);puts(""

);49}50

intmain()

51q=in

();57

for (int i=1;i<=q;++i)else66}

67for (int i=1;i<=n;++i)return0;

72 }

bzoj 5343/luogu p4602 [ctsc2018]混合果汁

對於每種果汁按美味度從大到小排序,以**為下標,以每種果汁為版本建立可持久化線段樹,維護果汁的體積和及**和。

對於每種需求,二分查詢果汁對應的版本,在該版本的線段樹上二分,判斷是否滿足對果汁體積要求的情況下滿足對**的要求。

code:

1 #include2 #include3 #include4

#define ll long long

5#define mid ((l+r)>>1)

6#define mm 2300005

7#define mn 100005

8using

namespace

std;

9 inline ll in

()15

struct

sta[mn];

19int

l[mm],r[mm],rt[mn];

20ll sum[mm],cst[mm],g,k;

21int

n,m,mx,cnt,res;

22 inline bool cmp(st x,st y)

23 inline void build(int &x,int l,int

r)27 inline void update(int &x,int l,int r,int

p,ll v)

33 inline ll query(int x,int l,int

r,ll v)

38int

main()

39sort(a+1,a+n+1,cmp);build(rt[0],1

,mx);

45for (int i=1;i<=n;++i) rt[i]=rt[i-1],update(rt[i],1

,mx,a[i].p,a[i].l);

46for (int i=1;i<=m;++i)printf("

%d\n

",(res<0?res:a[res].d));

53 }return0;

54 }

bzoj 1076/luogu p2473 [scoi2008]獎勵關

期望dp.令f[i][s]表示f在前i-1輪已處理狀態為s,後n-i+1輪到達此狀態的期望。

列舉下一輪選擇的寶物j,若j可選,則分為選擇或不選擇,選取較大值,否則則只能不選擇。

轉移方程見程式。答案即為f[1][0]的值。

code:

1 #include2 #include3 #include4

#define mk 103

5#define mn 20

6#define mm (1<<15)

7using

namespace

std;

8 inline int

in()

14double

f[mk][mm];

15int

p[mn],v[mn],k,n,x;

16int

main()

1723

for (int i=k;i;--i)

24for (int s=0;s<(1

%.6lf

",f[1][0]);return0;

30 }

bzoj 3668/luogup2114 [noi2014]起床困難綜合症

分別求出每一位是0/1的情況經過所有運算後的結果,這可以用二進位制位全0/全1的數分別模擬。

在取值範圍內從高位向低位貪心選取,若兩種操作結果相同,則選取二進位制位較小的數(即0)。否則選取使該位結果為1的數。

code:

1 #include2 #include3 #include4

using

namespace

std;

5 inline int

in()

11int

n,m,x,mx,bt,b0,b1,res;

12char

ch;13

intmain()

1423

for (;mx;mx>>=1,++bt);

24for (int i=bt-1;i>=0;--i)printf("

%d",res);return0;

28 }

bzoj1086/luogu p2325 [scoi2005]王室聯邦

code:

1 #include2 #include3 #include4

#define mn 1005

5using

namespace

std;

6 inline int

in()

12struct

edgee[mn<<1

];15

inth[mn],bt[mn],res[mn],cpt[mn],st[mn];

16int n,b,x,y,ct,cnt,top=0;17

bool

vis[mn];

18 inline void ins(int x,int

y)21 inline void dfs(int

u)30 }st[++top]=u;31}

32int

main()

3335

for (int i=1;ii) bt[1]=0;dfs(1

);38

while (top) res[st[top]]=ct,--top;printf("

%d\n

",ct);

39for (int i=1;i<=n;++i) printf("

%d ",res[i]);puts(""

);40

for (int i=1;i<=ct;++i) printf("

%d "

,cpt[i]);

41return0;

42 }

bzoj 1053/luogu p1463 [haoi2007]反素數

將乙個數n質因數分解,使n=∏pic

i(pi

i+1,ci≠0),則ci≥ci+1.

可以發現前12個質數之積大於2×109,故對前12個質數打表,dfs+剪枝求出不超過n的x,使得g(x)在1~n內最大即可。

code:

1 #include2 #include3 #include4

#define ll long long

5#define mx 12

6using

namespace

std;

7 inline ll in

()13

const

int pri[mx+1]=;

14ll n,mx,mp;

15 inline void dfs(int step,ll sum,int num,int

fct)ll prd=1;19

for (int i=0;i<=fct;++i)23}

24int

main()

25

KMP做題記錄

題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...