牛客練習賽60補題

2021-10-22 23:54:27 字數 1769 閱讀 8654

思路:考慮位運算&的特性 只有兩者都為1才會對答案有貢獻 且 對答案貢獻的值為 1 << k 其中k是當前1所在二進位制下的位數 所以考慮預處理每乙個位的1出現的次數 其中對每一位都會遍歷n*n次 所以每一位對答案的貢獻就是 a[i]a[i](1 << i) a[i]為當前位置1的個數

#include

using

namespace std;

#define ll long long

intmain()

;for

(int i =

0;i < n;i ++)}

ll sum =0;

for(

int i =

0;i <=

32;i ++

)printf

("%lld\n"

,sum)

;return0;

}

b.

題意:給出n個點 用這n個點構造三角形 問這些三角形的周長是多少 資料保證合法

思路:我們從邊考慮 組成乙個三角形需要三條邊 且 必須要三條邊 所以每條邊只能被選 n - 2次 所以每條邊對答案的貢獻 就是曼哈頓距離* 出現的次數為n-2次 然後暴力計算和即可 記得開ll

#include

using

namespace std;

#define ll long long

const

int mod =

998244353

;ll a[

3005][

2];int

main()

ll sum =0;

for(

int i =

0;i < n -

1;i ++)}

printf

("%lld\n"

,sum%mod)

;return0;

}

c.

題意:給出長度為n的字串 求有少長度為k的不同子串行

思路:dp肯定是沒跑了 用i, j , k 來表示 前i個字元 長度為j 以字元』a』 + k結尾的子串 dp的值為字串的數量

如果s[i] == 『a』 + k 則構造出新的字串 否則 則從上個狀態轉移過來

#include

using

namespace std;

#define ll long long

const

int mod =

1e9+

7,n =

1e3+5;

ll dp[n]

[n][30]

;///前i個字元 長度為j的 以'a' + k 為結尾的字串

intmain()

for(

int i =

1;i <= n;i ++)}

else}}

} ll res =0;

for(

int i =

0;i <

26;i ++

) res +

= dp[n]

[m][i]

,res %

= mod;

printf

("%lld\n"

,res)

;return0;

}

d.待

牛客練習賽78 補題

b cca的搬運 注意陣列的頭和尾在實際模擬時的情形 include using namespace std const int maxn 1e5 5 int a maxn dp maxn n,m,x1,up maxn ans,sum,vis maxn d,b maxn k,t intmain fo...

牛客練習賽67 補題 題解

a.牛牛愛字串 題意 給定字串,輸出當中的數字,注意不能有前導零。簡單模擬題,但格式要求非常嚴格,最後乙個數字後不能有空格。還有乙個坑點,如果只有0也是要輸出乙個0的。我是用佇列模擬,去掉前導零。include using namespace std const int n 1e5 10 strin...

操作集錦 牛客網 牛客練習賽60

題目傳送 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 輸入描述 第一行兩個整數n,k 第二行乙個長度為n的字串,保證只存在小寫字母.輸出描述 示例1輸入 3 1 abc輸出 3備註 1 n 1e3 ...