Codeforces Round #565 (Div. 3) C. Lose it! (思維)
阿新 • • 發佈:2020-10-14
-
題意:給你一串只含\(4,8,15,16,23,42\)的序列,如果它滿足長度是\(6\)的倍數並且有\(\frac {k}{6}\)個子序列是\([4,8,15,16,23,42]\),則定義它是好的,問最少刪除多少元素使得序列是好的.
-
題解:我們開個桶(要離散化)記錄這些數字出現的次數,然後線性遍歷,當遇到\(4\),我們就直接讓它++,否則判斷它的前一個數的次數是否大於\(0\),如果是,那麼它的前一個數的次數--,它自己次數++,如果前一個數出現的次數為\(0\),那麼當前這個數就不能構成我們想要的序列,直接報廢,最後我們可以得到滿足條件的序列個數\(cnt[6]\),序列中含有\(6\)
-
程式碼:
int n; int p[N]; int a[N]; int cnt[N]; int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n; p[4]=1,p[8]=2,p[15]=3,p[16]=4,p[23]=5,p[42]=6; for(int i=1;i<=n;++i) cin>>a[i]; for(int i=1;i<=n;++i){ if(a[i]==4) cnt[1]++; if(cnt[p[a[i]]-1]){ cnt[p[a[i]]-1]--; cnt[p[a[i]]]++; } } cout<<n-6*cnt[6]<<endl; return 0; }