牛客練習賽71 E 神奇的迷宮 點分治 NTT

2021-10-24 20:40:32 字數 2804 閱讀 4659

e 神奇的迷宮

思路:點分治+ntt裸題,ntt初始化很重要!!!

ntt中limit,l,a陣列和b陣列都得初始化。

這個題中點分治的sum和主函式中的sum求和弄混了因此一直t,心態崩了。

#include

//注意此模板點的下標應為1到n!!!

#include

#include

using

namespace std;

const

int max_n=

600100

;const

int g=3;

const

int gi=

332748118

;const

long

long mod=

998244353

;const

int inf=

0x3f3f3f3f

;int son[max_n]

,max_son[max_n]

,dis[max_n]

;long

long pp[max_n]

;bool vis[max_n]

;long

long ans=0;

int root;

int cnt,sum;

vector<

int>v[max_n]

;long

long p[max_n]

,w[max_n]

;int limit=

1,l,r[max_n]

;long

long a[

2*max_n]

,b[2

*max_n]

;inline

long

long

pow_mod

(long

long a,

long

long n,

long

long m)

a=(a*a)

%m; n>>=1;

}return ans;

}inline

void

ntt(

long

long

*a,int type)

for(

int mid=

1;mid}}

}void

solve

(int n,

int m)

for(

int i=

0;i) r[i]

=(r[i>>1]

>>1)

|((i&1

)<<

(l-1))

;for

(int i=n+

1;i) a[i]

=b[i]=0

;ntt

(a,1);

ntt(b,1)

;for

(int i=

0;i) a[i]

=a[i]

*b[i]

%mod;

ntt(a,-1

);long

long inv=

pow_mod

(limit,mod-

2,mod)

;for

(int i=

0;i<=n+m;i++

) a[i]

=a[i]

*inv%mod;

}void

dfs(

int now,

int fa)

max_son[now]

=max

(max_son[now]

,sum-son[now]);

if(max_son[now]

) root=now;

}void

getdis

(int now,

int fa,

int d)

}int

calc

(int now,

int d)

for(i=

0;i<=n;i++

) b[i]

=a[i]

;//cout// coutsolve

(n,n)

;for

(i=0

;i<=n+n;i++

)//cout<<"\n";

for(i=

0;i<=n+n;i++

) a[i]

=b[i]=0

;return res;

}void

divide

(int now)

}int

main

(void

)for

(i=1

;i<=n;i++

) p[i]

=p[i]

*pow_mod

(sum,mod-

2,mod)

%mod;

for(i=

0;i)scanf

("%lld"

,&w[i]);

for(i=

1;i) sum=n;

max_son[0]

=n; root=0;

dfs(1,

0);divide

(root)

;//ans

printf

("%lld\n"

,ans)

;return0;

}

牛客練習賽11E(最近點對)

這個題出得還是蠻好的其實。要不是看到很多人a了窩可能就被數學勸退了。表面是數學題,那個函式分析一下就會發現和距離公式很像。設h x 為a的字首和,那f x 就是h x 上2點之間的距離,即求h x 上的最近點對。然後關於最近點對窩是沒學過。然後由汪聚聚提供了模板。過後要學。可以很容易發現這個是個分治...

牛客20180601練習賽19 E

已知第i個瓶子的品牌為ai,且其能開啟bi品牌的瓶子.問有幾瓶飲料托公尺無法喝到.被用於開啟飲料瓶的瓶子不一定需要被開啟.乙個瓶子不能開啟其本身.輸入描述 第一行乙個整數n,表示飲料的瓶數.接下來n行,每行兩個整數ai,bi.輸出描述 輸出一行乙個整數,表示小托公尺無法喝到的飲料瓶數.示例1 輸入 ...

牛客練習賽12 B 迷宮

牛客練習賽12 b 迷宮 這道題比以前的迷宮問題多了一道門 d 必須有 k 才能過門 以前我們用bfs搜尋來解決這種問題,每個 只能經過一次 而此時每個 能夠經過兩次,分別為有 k 和無 k include include include include include include define...