牛客寒假第一場訓練賽

2021-10-18 18:46:17 字數 2807 閱讀 2070

比賽鏈結

題解b題

構造題先找構造括號效率比較高的方法

(()) 這種括號裡面套括號效率比較高而且合法

所以思路就是對所給整數開方,剩餘的零頭我們用列舉的方法。

但是對於一些資料直接用開方得到的數x構造的話,會導致零頭太小,不好構造零頭

第一步構造的是乙個對稱的括號,有x個左括號,如果零頭小於x的話,就不好構造零頭。所以如果零頭小於x的話,就選擇把x縮小1,再構造零頭就可以了。

**如下

#

include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int max =

5000

;ll n, k;

int p[max]

,v[max]

,cnt;

void

xxs()}

}void

work()

ll x =

(int

)sqrt

(k);

ll sum = k - x * x;

ll a = sum - x;

if(a <=0)

for(ll i =

1; i <= x; i++

)printf

("(");

for(ll i =

1; i <= x; i++

)printf

(")");

for(ll i =

1; i <= a;

++i)

printf

("(");

printf

(")");

cout << endl;

}int

main()

i題

也是構造題

首先觀察資料範圍

所要求構造的對數, 是小於n/2的,這可以聯想到用奇偶數構造。

由於n個偶數只能構造 n - 1 對

所以要分兩種情況 k<=n/2 和 k == n/2;

其次第二種情況我們要用 3 的倍數來構造(用偶數構造其實是用的2的倍數,如果k沒有限制範圍,還可以用 5 的倍數等等,即質因數的倍數來構造),而用一次3的倍數構造,就可以把6拿出來,因為6也是2的倍數並且是同時為2和3倍數中最小的。

#

include

using

namespace std;

int n,k;

intmain()

else

for(

int i =

1; i <= k;

++i)

if(i *2!=

6)printf

("%d "

, i *2)

;printf

("6 3 ");

for(

int i =

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

if( i !=3)

printf

("%d "

, i)

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

// if( i*2-1 != 3) printf("%d ", i * 2 - 1);

// if(n % 2 != 0) printf("%d",n);

// 這個輸出方式很容易忽略掉最後乙個n導致出錯,如果是奇數,n不會輸出,所以要打個補丁

}return0;

}

j題

最大的乙個質因子就是 滿足 2 * pi(一次方) <= n / 2

關於求剩餘數的lcm

由唯一分解定理

2 * 2 * 2 * 3 * 3 與 2 * 2 * 3 * 3 * 3 這兩個數的lcm

就是 取這兩個數 2的最高次冪 與 3的最高次冪的乘積

n個數的lcm就是圖中的結論

#

include

using

namespace std;

#define

n80010000

#define

lllong

long

int num[n]

, prim[

5000060];

int pn =0;

const ll mod =

1e9+7;

void

table()

}}intmain()

for(i =

1; prim[i]

<= n /

2; i++

)// 從質數3開始遍歷求直到 pi

ll temp2 =1;

while

(temp2 *

2<= n /

3) temp2 *=2;

// 單獨求一下2的最高次方

res = res * temp2 % mod;

cout << res;

}

牛客寒假多校第一場A

題目描述 在絕地求生 吃雞 遊戲裡,不同的槍枝有不同的威力,更是可以搭配不同的配件,以提公升槍枝的效能。每一把槍都有其威力及其可裝備配件種類。每乙個配件有其所屬種類,可以為槍枝提供威力的百分比加成。每一把槍只能裝備乙個同類配件。給你n把槍枝和m個配件,槍的威力為p,可裝備的配件數量為k,為k個不同型...

牛客2023年度訓練聯盟熱身訓練賽第一場E題

知識點 單調棧 ac include include include using namespace std int a 200005 int vis 200010 int last 200005 int s 200005 int top intmain for int i 1 i k i for ...

牛客2023年度訓練聯盟熱身訓練賽第一場(講題)

e題 early orders 題意 給定 n k 和長度為n的陣列x i 1 k n 2e5,1 x i k 要在這個陣列裡找乙個長度為k的子串行,使得數字1到k在這個序列裡各出現一次,輸出字典序最小的子串行 輸入保證陣列 x i 包括了1到k的所有數字 思路 很容易想到貪心地選擇小的數放在前面,...