P1016 旅行家的預算 模擬 貪心

2022-05-01 15:48:11 字數 1903 閱讀 9640

墨墨購買了一套n支彩色畫筆(其中有些顏色可能相同),擺成一排,你需要回答墨墨的提問。墨墨會向你發布如下指令:

1、 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。

2、 r p col 把第p支畫筆替換為顏色col。

為了滿足墨墨的要求,你知道你需要幹什麼了嗎?

輸入格式:

第1行兩個整數n,m,分別代表初始畫筆的數量以及墨墨會做的事情的個數。

第2行n個整數,分別代表初始畫筆排中第i支畫筆的顏色。

第3行到第2+m行,每行分別代表墨墨會做的一件事情,格式見題幹部分。

輸出格式:

對於每乙個query的詢問,你需要在對應的行中給出乙個數字,代表第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。

輸入樣例#1: 複製

6 5

1 2 3 4 5 5

q 1 4

q 2 6

r 1 2

q 1 4

q 2 6

輸出樣例#1: 複製

443

4比較麻煩的一道模擬題:

貪心原則:

如果在當前油站的範圍內有比當前油價更小的加油站 維護當前油量為恰好到那個更小的油站所用油量即可

如果沒有 則加滿油

//

#include

#include#include

#include

#include

using

namespace

std;

//input by bxd

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);--i)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m)

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define pb push_back

#define clr(a,v) memset(a,v,sizeof a)

#define inf 0x3f3f3f3f

#define lson l,m,pos<<1

#define rson m+1,r,pos<<1|1

////////////////////////////////////

//const

int n=3e6+5

;struct

node

s[n];

double

d,c,money,d2,p1,nowoil;

intnowpos,n;

intmain()

while(1

)

}if(flag!=-1) money+=x*s[nowpos].p; nowoil=0;nowpos=flag;continue

;}

if(s[n+1].d-s[nowpos].d<=c*d2)//

如果能跳到終點

double x=c-nowoil; money+=s[nowpos].p*x; nowoil=c-(s[nowpos+1].d-s[nowpos].d)/d2; nowpos++;//

如果當前位置的油價是最小的

} printf(

"%.2lf

",money);

return0;

}

view code

(貪心)P1016 旅行家的預算

應用 題庫訓練 比賽記錄討論 題目提供者ccf noi 評測方式雲端評測標籤noip提高組1999 難度普及 提高 時空限制1000ms 128mb 提交 題解 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1d1 汽車油箱的容量cc 以公升為...

P1016 旅行家的預算 貪心

題目鏈結 一道貪心題,為使油費最小,則我們就必須盡可能的在油價低的地方加油。在不加油的情況下,汽車可行駛的最大距離為c d2,記為max d,所以到達乙個車站後加的油可影響的範圍在後面距離當前加油站小於等於max d的加油站,為使油費最少,我們不能浪費一分錢。如果在max d內有油價低於當前加油站時...

P1016 旅行家的預算 貪心

p1016 旅行家的預算 貪心求,在當前點如果能到達距離最近的油價比他小的就直接去油價比他小的,如果在可行範圍內沒有比他油價小的,就加滿開到可行範圍內油價最小的點 這麼做是對的,我不會證明 還有就是,如果變數定義在外面了,在for迴圈裡面就不要定義了,這個點卡了我一下午 一直停止執行 include...