秀姿势(jzoj 3464)
生活随笔
收集整理的這篇文章主要介紹了
秀姿势(jzoj 3464)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
秀姿勢
jzoj 3464
題目大意
有n個數,每個數都有一個分組,現在問你最多去掉k個分組后,做多有多少個數是連續的同組的
輸入樣例
9 1 2 7 3 7 7 3 7 5 7輸出樣例
4樣例解釋
總共有9個學生,最多只能刷一次學生。
若不刷,最長完美學生連續子序列長度為2
若刷掉考第3門考得好的學生,則學生序列變成2 7 7 7 7 5 7,最長完美學生連續子序列長度為4.
數據范圍
對于10%的數據:n?10n\leqslant 10n?10
對于30%的數據:n?1000n\leqslant 1000n?1000
對于100%的數據:1?n?1000001\leqslant n\leqslant 1000001?n?100000
解題思路
題目就是找一個連續的子串里面包含的組數不超過k+1,這樣刪去k個后還剩一個,然后找這些子串中出現的最多的數出現的次數
我們從一開始讓數字進隊,當組數大于k+1時就從隊尾出,直到符合為止
代碼
#include<map> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; int n, m, s, x, ans, a[100010]; map < int , int > p; int main() {scanf("%d%d", &n, &m);m += 1;x = 1;for (int i = 1; i <= n; ++i){scanf("%d", &a[i]);if (!p[a[i]]) s++;//新的組p[a[i]]++;while (s > m){p[a[x]]--;if (!p[a[x]]) s--;//這個組沒了x++;}ans = max(ans, p[a[i]]);//求最大值}printf("%d", ans);return 0; }總結
以上是生活随笔為你收集整理的秀姿势(jzoj 3464)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小麦亩产一千八(jzoj 3461)
- 下一篇: 联通如意通5元套餐都包含什么啊