牛客國慶集訓派對Day4 G I H

2021-08-28 17:10:36 字數 3067 閱讀 1531

小 bo 有 n 個正整數 a1..an,以及乙個權值序列 w1…wn,現在他定義

現在他想知道

你只需要輸出答案對 109+7 取模後的值

第一行乙個正整數 n

第二行 n 個正整數 a1..an

第三行 n 個正整數 w1..wn

輸出答案對 109+7 取模後的值
示例1

複製

3

1 1 1

1 1 1

複製

10
1≤ n≤ 3x 105

1≤ ai≤ 107

1≤ wi≤ 107

注意:取模的時候不要ans+=balabala%mod,這樣只是給等號後的數取模了,沒有給ans加後的值取模,會爆的嚶嚶嚶qwq

**如下:

#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

const int n=300005,mod=1e9+7;

ll suma[n],sumb1[n],sumb[n],w[n],a[n];

int main()

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

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

ll tmp,ans;

int k;

if(n==1)ans=w[1]*a[1];

else ans=(suma[n]*w[1]%mod+suma[n]*w[n]%mod)%mod;

for(int r=2;r小 a 有一棵長的很奇怪的樹,他由 n 條鏈和 1 個點作為根構成,第 i 條鏈有 ai 個點,每一條鏈的一端都與根結點相連。

現在小 a 想知道,這棵長得奇怪的樹有多少非空的連通子樹,你只需要輸出答案對 998244353 取模的值即可

第一行乙個正整數 n

第二行 n 個正整數 a1…an

輸出答案對 998244353 取模後的值
示例1

複製

2

1 1

複製

6
1≤ n≤ 105

1≤ ai≤ 107

思路:這是個思維題啊,還挺不錯的

當沒有根的時候:bi=(a[i]+1)*a[i]/2     把b1到bn加起來

當有根的時候(a[1]+1)*(a[2]+1)*…(a[n]+1)

不考慮根的情況好理解,當有根節點的時候,每一條鏈從根開始,一共有1,2,3…1+a[i]種情況,把每個鏈的情況乘起來就好啦~

**如下:

#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

const int n=300005,mod=998244353;

ll mod_pow(ll a,ll b)

return res;

}int main()

printf("%lld\n",(res1+res2)%mod);

}

給定一棵 n 個點的樹,其中 1 號結點是根,每個結點要麼是黑色要麼是白色

現在小 bo 和小 biao 要進行博弈,他們兩輪流操作,每次選擇乙個黑色的結點將它變白,之後可以選擇任意多個(可以不選)該點的祖先(不包含自己),然後將這些點的顏色翻轉,不能進行操作的人輸

由於小 bo 猜拳經常輸給小 biao,他想在這個遊戲上扳回一城,現在他想問你給定了乙個初始局面,是先手必勝還是後手必勝

第一行乙個正整數 n

第二行 n 個整數 w1..wn,wi∈ ,wi=1 表示第 i 個結點一開始是黑點,否則是白點

接下來 n-1 行,每行兩個正整數 u,v 表示一條樹邊 (u,v)

如果先手必勝,輸出first ,否則輸出second
示例1

複製

2

1 01 2

複製

first
1≤ n≤ 1000
思路:

(1)若每層的黑點數都為偶數那麼先手必敗,因為先手改一層的黑點為白點,然後操作完,後手改相同層的黑點為白點,然後做和先手相同的操作,那麼祖先相當於沒變,每層都是偶數那麼一定能保證先手到無路可走的狀態。

(2)反之,先手勝,先手先把深度最大的奇數層的變為偶數,然後對其祖先操作,使得每層的黑點數都是偶數,接著後手操作,先手做(1)操作,後手敗。

#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

const int n=1005,mod=998244353;

int a[n];

struct pro;

pro edge[2*n];

int cnt=0,head[n],depth[n];

void addedge(int from,int to)

void dfs(int pre,int now,int dep)

}int main()

int s,t;

for(int i=1;i判斷的時候

if(depth[i]%2==1)

加個break就只能過70%不知道為什麼

牛客國慶集訓派對Day4

a 把b n include include include includeusing namespace std int main d 由於是個完全圖,選擇乙個權值最小的點,其他所有的點向它連線就行了。注意點為1的時候輸出0 include include include includeusing...

2020牛客國慶集訓派對day4 補題

2020牛客國慶集訓派對day4 b 題意 題意 求最長等差序列的長度。dp 攤派了我講不明白,參考下這兩篇部落格吧 捂臉 傳送門1 傳送門2 include include include include include include include using namespace std ty...

牛客國慶集訓派對Day1

a 看樣例過題 include include include include include using namespace std typedef long long ll typedef pairpii const int maxn 1e5 10 vectorg maxn int a 10 i...