科林明倫杯哈理工第十屆同步賽部分題解

2021-10-06 16:38:36 字數 1379 閱讀 9349

題目描述

存在n個數,每次操作可以任選乙個區間使得區間內的所有數字減一。問最少多少次操作,可以讓所有數都變成1。

資料保證一定有解。

輸入描述:

輸入t,代表有t組資料。每組資料輸入n,代表有n個數。接下來一行輸入n個數,數字大小小於1e6。(t<=1000,n<1e5,∑n < 1e6)

輸出描述:

每組資料輸出乙個整數代表最少需要操作的次數。

示例1輸入16

1 3 5 2 7 1

輸出被卡了2小時,原來是搭積木問題。

用a[1]~a[n]存高度。

遍歷a[1]到a[n]。

若後列》前列,總次數增加差值。

否則,不用加(因前列搭積木到高度等於後列時可以把後列搭好了)。

第乙個點單獨處理,它前列是地面(本題地面高1,用a[0]=1初始化)。

**:

#include 

#include

#include

#include

#include

#include

using namespace std;

int a[

100005];

int main()

}printf

("%d\n"

,sum);}

}return0;

}

題目描述

小明有一根長度為a的木棒,現在小明想將木棒分為多段(每段木棒長度必須為整數),

使得分隔後的木棍中,取出的任意三段都不能構成三角形,小明想知道木棒最多被分成幾段?

輸入描述:

輸入資料的第一行是t,表示資料的組數, 接下來每組資料輸入乙個a

(t<=1000, 1 <= a < 2^64 - 1)

輸出描述:

對於每組輸入樣例,列印木棒最多被分為多少段

示例1輸入13

輸出12用手寫寫思路就來了,為使分的小段最多,分段應從最小開始取 1 1 2 3 5 8…… 容易知道這是斐波那契數列求和問題。注意木棒長度1 <= a < 2^64 - 1,用unsigned long long 存資料

#include 

#include

#include

#include

#include

using namespace std;

int main()

else

if(n==2)

else

sum=sum+b;

if(sum>n)

//超過木棒長

cnt++;}

} cout

}

第十屆藍橋杯(國賽) 求值

問題描述 學習了約數後,小明對於約數很好奇,他發現,給定乙個正整數 t,總是可以找到含有 t 個約數的整數。小明對於含有 t 個約數的最小數非常感興趣,並把它定義為 st 例如 s1 1,s2 2,s3 4,s4 6,現在小明想知道,當 t 100 時,st 是多少?即 s100 是多少?答案提交 ...

zzuli第十屆校賽

時間限制 1 sec 記憶體限制 256 mb 提交 211 解決 42 提交 狀態 討論版 命題人 admin 在麥克雷的面前有n個數,以及乙個r c的矩陣。現在他的任務是從n個數中取出 r c 個,並填入這個矩陣中。矩陣每一行的法值為本行最大值與最小值的差,而整個矩陣的法值為每一行的法值的最大值...

第十屆藍橋杯(國賽) 質數拆分

問題描述 2019可以被分解成若干個兩兩不同的素數,請問不同的分解方案有多少種?注意 分解方案不考慮順序,如 2 2017 2019 和 2017 2 2019 屬於同一種方案。答案 55965365465060 題解 01揹包 f i j 從前 i 個物品中選,且總體積恰好為 j 的方案的數量 i...