牛客寒假演算法基礎訓練營6

2021-09-10 13:26:11 字數 3324 閱讀 1998

早知道這次題目這麼簡單就認真做了,最後一場沒心做,後面懶得想了,唉罪過罪過

1、煤氣灶

題目描述

小j開始打工,準備賺錢買煤氣灶。

第一天,小j的工資為n元,之後每天他的工資都比前一天多d元。

已知煤氣灶需要m元,求小j最少工作幾天才能買到煤氣灶。

輸入描述:

四個整數 n,m,d,x

分別表示小j第一天的工資,煤氣灶的**,工資每天的增長量,答案不超過x

輸出描述:

乙個數表示答案

示例1輸入

10 100 20 100輸出4

說明10+30+50+70>=100

備註:0≤n,d≤10^9,n+d>0

1≤m≤10^18

1≤x≤10^9

這個題居然可以暴力直接過,需要注意一下資料型別的問題,10^18需要用long long int ,另外x完全是乙個沒用的量,忽略不計就可

ac**

#includeusing namespace std;

int main()

int main()

cout<2、項鍊

小b想給她的新項鍊染色。

現在有m種顏色,對於第i種顏色,小b有a_i單位的顏料,每單位顏料可以染項鍊的乙個珠子;

同時,小b對於第i種顏色的喜愛度為b_i。

已知項鍊有n個珠子,求染色後每個珠子的顏色的喜愛度之和的最大值。

(每個珠子只能至多被染一次,不被染色則喜愛度為0)

輸入描述:

第一行兩個數n,m

第二行m個數a_i

第三行m個數b_i

輸出描述:

乙個數表示答案

示例1輸入

5 31 2 3

3 2 1輸出9

示例2輸入

5 31 2 1

3 2 1輸出8

備註:1≤n,m≤10^5

0≤ai,bi≤10^6

算是簽到題吧,先排一下序,之後直接運算就好,沒什麼太大難度。

ac**:

#includeusing namespace std;

struct node;

struct node colour[100005];

bool cmp(struct node x,struct node y)

int main()

cout<3、美食

題目描述

小b喜歡美食。

現在有n個美食排成一排擺在小b的面前,依次編號為1…n,編號為i的食物大小為 a[i] ,即足夠小b吃 a[i] 口。

小b每次會吃兩口,這兩口要麼是編號相同的美食,要麼是編號之差的絕對值為1的美食。

小b想知道,她最多能吃幾次?

輸入描述:

第1行乙個正整數n,表示美食個數

接下來n行,第i行乙個整數a[i],表示編號為i的美食的大小

輸出描述:

乙個數表示小b最多吃幾次。

示例1輸入41

578輸出

10說明

用二元組(a,b)表示某一次吃的兩個美食分別為第a個美食和第b個美食,則下面為乙個吃10次的方案:

(1,2)(2,2)(2,2)(3,4)(3,4)(3,4)(3,4)(3,4)(3,4)(3,4)

注意不一定要吃完。

備註:基本的列舉加貪心,從頭開始,如果當前美食是偶數就直接吃完,如果是奇數且下乙個美食也是奇數就兩個拼乙個,這樣下來吃到最後即可

ac**

#includeusing namespace std;

int a[100005];

int main()

}cout<4、區間或和

題目描述

求a|(a+1)|(a+2)|…|(b-1)|b。

其中|表示[按位或

輸入描述:

多組輸入,每行兩個數表示a和b

輸出描述:

對於每組輸入,輸出乙個數a|(a+1)|(a+2)|…|(b-1)|b。

示例1輸入

99 109

68 77

55 66

34 43

1111234 1114321

輸出111

79127

471179647

備註:輸入不超過10000行,

0≤a,b≤10^18,

a≤b這道題對了70%的測試用例,感覺思路是沒有錯的。大體講一下思路,從異或運算出發,對應二進位制位上兩個有乙個為1即為1,那麼在這道題中,從a異或到b,取a-b=temp,temp需要多少個二進位制位數來表示,那麼異或後這幾位都將變成1,利用二進位制移位的特性,先左移再右移再加上後面全是1的對應十進位制數,最後還需要異或一下a,因為後面的位數完成了處理,前面的還沒有處理,前面的還需要再異或處理一下,感覺思路大體沒什麼問題,可能是細節上還有幾個沒注意的地方。

70%**

#includeusing namespace std;

int main()

}

5、出題

題目描述

小b準備出模擬賽。

她把題目按難度分為四等,分值分別為6,7,8,9。

已知小b共出了m道題,共n分。

求小b最少出了多少道6分題。

輸入描述:

兩個正整數n,m

輸出描述:

乙個數,表示答案。

若無解,輸出"jgzjgzjgz"。

示例1輸入

34 5輸出1

示例2輸入

32 5輸出3

示例3輸入

5 1輸出

jgzjgzjgz

備註:n,m≤10^12

一開始沒思路,看資料規模肯定不能暴力,看了題解才知道原來很簡單。

有解的充要條件為 6m≤n≤9m 。

若有解:

設有 x(0≤x≤m) 道6分題,則剩下的m-x題共n-6x分,

則剩下的題有解的充要條件為 7(m−x)≤n−6x≤9(m−x) ,

解得 7m−n≤x≤(9m−n)/3 。

因此答案為max(0,7m-n)。

ac**

#includeusing namespace std;

int main()

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

for(int j=1;j<=m;j++)

s[i][j]+=s[i-1][j];

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

for(int j=1;j<=m;j++)

s[i][j]+=s[i][j-1];

int q;

cin>>q;

while(q--)

}

牛客寒假演算法基礎訓練營1 G

這道題的題解講的非常好了已經,對於1 n數的排列子區間 l,r 使得區間中的數滿足連續的條件為 r l max a l r min a l r l,r為下標 既然要使 l,r 為萌區間,那麼就要找到這個區間內的最大值mx與最小值mn,判斷是否滿足條件 若不滿足條件,那麼需要將 mn,mx 缺少的數字...

牛客寒假演算法基礎訓練營3 G 糖果

傳送門 在乙個幼兒園裡面有n個小朋友,分別編號1,2,n1,2,n。在這些小朋友中有一些小朋友互為朋友關係,總共有 mathit mm對朋友。作為幼兒園老師,你想買一些糖果分給小朋友,你知道第i個小朋友想要至少想要ai個糖果。個糖果,否則他就會不開心。同時,如果乙個小朋友得到的糖果數小於他某個朋友得...

牛客寒假演算法基礎演算法訓練營2

1 座與重修費 題目描述 期末考試結束了,座發現很多人掛了大物,只能等著第二年重修,還要交400元的重修費。座突然想起有個學長和他講過,如果學校哪一年缺錢了,那一年的大物試卷就會特別難。現在 座有了所有人的成績,座想知道如果所有掛科的人都在第二年重修,學校能賺多少重修費?掛科是指一門課的分數小於60...