題目鏈結
題解:貌似一眼看過去是乙個貪心。
其他的演算法要記錄的東西就太多了。
部分分其實很高。但是沒有什麼提示。
想一些套路:二分?不行還要貪心判斷。
分治?前後取法是有影響的。
時光倒流?
也許可以?
其實比較麻煩的是蔬菜變質。這樣就使得我們不能每次賣最貴的。
如果時光倒流,那麼就會有些蔬菜在某乙個時刻以某乙個初值出現,然後每過一天,增長固定的個數。
那麼,面對最後一天,我們就剩下這麼多的菜了。肯定要賣最貴的m個
然後,倒數第二天,一些蔬菜出現了,一些蔬菜變多了,我們在最後一天賣菜的基礎上,可以繼續選擇最貴的m個。
因為,最後一天的菜和倒數第二天的菜交換一定不優,因為可能倒數第二天能買到的,最後一天就壞了。而由於取最大的m個,某天賣其他的菜也不會更優。
類似數學歸納法可以證明。
現在我們可以找出來p天的最大收益了。
但是,詢問太多了, 可以不可以遞推呢?
可以。求出max(pi)的值mxans
然後,每往前提一天,那麼,就把所有賣過的菜中,刪掉最便宜的m個。
合法顯然,因為後面能賣的,前面一定能賣、
如果不賣這些,同層之間交換不優的。
離線處理,然後倒序遞推即可。
細節比較多:
1.不能除以0
2.等等
**:
#pragma gcc optimize(2)#pragma gcc optimize(3)
#pragma gcc optimize"ofast"#include
#define ri register int
using
namespace
std;
#define int long long
#define numb (ch^'0')typedef
long
long
ll;const
int n=2e5+5
;void rd(int &x)
struct
node
}sta[n];
inttop;
ll mxans;
intval[n],c[n],s[n],dele[n];
intsell[n];
intpriority_queue
q1;struct
bac};
priority_queue
q2;int
n,m,k;
struct
question
}que[n];
ll ans[n];
intup;
intid[n];
vector
mem[n];//
bool cmp(int a,int
b)signed main()
for(int i=1;i<=k;i++)sort(que+1,que+k+1
); up=que[1
].day;
//coutcout<<" up "rem[i+n]=1
; dele[i+n]=0
; c[i+n]=1
; val[i+n]=s[i]+val[i];
c[i]--;
if(c[i]==0) continue;//
warning!!
int exi=(c[i]+dele[i]-1)/dele[i];
int re=c[i]%dele[i];
if(re==0) re=dele[i];
if(exi>up)
mem[exi].push_back(i);
}
//for(int i=1;i<=2*n;i++)
if(fl)
sort(id+1,id+2*n+1
,cmp);
int ptr=k;
if(que[ptr].day==0) ptr--;
int r=1
;
//cout<<" day "//cout<<" nd "while(que[ptr].day==d&&ptr)
//cout<}
//coutreturn0;
}for(ri i=up;i>=1;i--)
int nd=m;
while
(nd)
else
if(now.id<=n) sta[++top]=now;//
warning!! id>n not push back
}
while
(top)
//cout<<" after "<}
ans[que[
1].id]=mxans;
if(k==1
)
int tot=0
;
for(ri i=1;i<=2*n;i++)
}int ptr=2
;
for(ri i=up;i>=1;i--)
if((i-1)*m>=tot) continue;//
warning!!!
if(i==1) break
;
int nd=min(m,tot-((i-1)*m));
while
(nd)
else}}
for(int i=1;i<=k;i++)
return0;
}/*author: *miracle*
date: 2018/10/14 14:19:49
*/
NOI2017 蚯蚓排隊
嘟嘟嘟 現在看來這道題還不是特別難。別一看到字串就想sam 看到 k 很小,所以我們可以搞乙個單次修改複雜度跟 k 有關的演算法。能想到,每一次斷開或鏈結,最多隻會影響 k 2 個長度為 k 的區間。所以我們開乙個雜湊表,每一次拼接時就往雜湊表裡加入 k 2 個新的雜湊值,斷鏈的時候就把這些雜湊值減...
NOI2017蚯蚓排隊
原題鏈結 發現 k 50 在插入和刪除時最多會影響不超過 k2 個串,用鍊錶實現插入和刪除,然後只需用雜湊表維護每個長度不超過k的串的出現次數,雜湊的話可以先用比較大的範圍的值處理衝突,再對映到1e8的桶裡統計。考慮複雜度。首先在刪除時由於保證了 c 1000 所以這部分複雜度是o ck2 的。插入...
NOI2017醬油記(偽)
好吧其實是因為菜沒拿到名額才去打同步賽的。day1 拿到題面 1.不存在的 2.tan 90 3.辣雞吉利 臥槽,全是假題。此時skydec在裙上說第三道用dp騙分。於是我就愉快的擼了乙個小時擼出來了。然後一看t2,好像可以雜湊呀 然後就愉快的花了乙個小時碼碼碼 半個小時之後調完了。然後看第一道。還...