python實現 CCF201709 5 除法

2021-09-12 11:03:19 字數 2037 閱讀 3536

試題編號:

201709-5

試題名稱:

除法時間限制:

10.0s

記憶體限制:

256.0mb

問題描述:

問題描述

小蔥喜歡除法,所以他給了你n個數a1, a2, ⋯, an,並且希望你執行m次操作,每次操作可能有以下兩種:

給你三個數l, r, v,你需要將al, al+1, ⋯, ar之間所有v的倍數除以v。

給你兩個數l, r,你需要回答al + al+1 + ⋯ + ar的值是多少。

輸入格式

第一行兩個整數n, m,代表數的個數和操作的次數。

接下來一行n個整數,代表n個數一開始的值。

接下來m行,每行代表依次操作。每行開始有乙個整數opt。如果opt=1,那麼接下來有三個數l, r, v,代表這次操作需要將第l個數到第r個數中v的倍數除以v;如果opt = 2,那麼接下來有兩個數l, r,代表你需要回答第l個數到第r個數的和。

輸出格式

對於每一次的第二種操作,輸出一行代表這次操作所詢問的值。

樣例輸入

5 31 2 3 4 5

2 1 5

1 1 3 2

2 1 5

樣例輸出

1514

評測用例規模與約定

對於30%的評測用例,1 ≤ n, m ≤ 1000;

對於另外20%的評測用例,第一種操作中一定有l = r;

對於另外20%的評測用例,第一種操作中一定有l = 1 , r = n;

對於100%的評測用例,1 ≤ n, m ≤ 105,0 ≤ a1, a2, ⋯, an ≤ 106, 1 ≤ v ≤ 106, 1 ≤ l ≤ r ≤ n。

n, m = list(map(int, input().split()))

a = list(map(int, input().split()))

a.insert(0,0)

tree = [0] * (n+1) # 樹形陣列,注意陣列要從1開始

def lowbit(x): # 計算2^k的值(其中k為x的二進位制中從最低到高位連續0的長度)

return (-x) & x

def update(x, y, n): # 單點更新

'''x為更新的位置,y為更新後的值,n為陣列個數

tree[i] = a[i+1-2^k]+a[i+2-2^k]+...+a[i]

'''i = x

while i < n:

tree[i] += y

i += lowbit(i)

def getsum(i): # 單點更新的逆操作

ans = 0

while i > 0:

ans += tree[i]

i -= lowbit(i)

return ans

# 初始化樹形陣列

for i in range(1, n+1):

update(i, a[i], n+1)

result =

for i in range(m):

temp = list(map(int, input().split()))

op, l, r = temp[0], temp[1], temp[2]

if op == 2:

ans = getsum(r) - getsum(l-1) # 求l到r的和

elif op == 1:

v = temp[3]

if v == 1:

continue

for i in range(l, r+1):

if a[i] >= v and a[i] % v == 0:

update(i, -(a[i] - a[i]//v), n+1) # 注意這裡的y為:tree[i]=tree[i]-a[i]+a[i]/v

a[i] = a[i] // v

for i in result:

print(i)

CCF2023年12月第3題 Crontab

這一題要求我們對給定的配置資訊,在特定的時間段輸出需要執行的任務。在unix中每分鐘檢查一次,最簡單的思路就是用迴圈模擬時間的推移,每分鐘匹配一次規則。這種情況在真正的系統裡是很高效的,因為時間是真實流動的。但如果是模擬執行則有些浪費時間。如果在考試過程中想不到其它方法這種暴力方法至少可以通過70 ...

CCF 2023年12月第5題 商路

這一題題目很長,但理解起來並不困難。有一點很重要,那就是題目輸入的順序是城市編號的順序,而城市編號的順序又直接決定了城市之間的上下級關係。雖然編號小的不一定是大編號的下級,但下級城市的編號一定比上級城市的編號小,如何利用這一點非常重要。假如城市a的下級城市是b,c,d 那如果b,c,d 本身的商路價...

CCF 2023年3月第5題 引水入城(80分)

這一題是很明確的最大流問題 但是無論是用dfs 還是 bfs 都肯定會超時。因為規模太大了。如果想練手網路流可以試試提交乙個殘量網路的 應該只能得50分左右。dfs,bfs 有缺陷得地方在於沒有認識到這一題圖得結構是非常規整得。這一題得方案還是使用動態規劃來做。將最大流問題轉換為最小割問題 接下來只...