#1051 : 補提交卡
描述
小Ho給自己定了一個宏偉的目標:連續100天每天堅持在hihoCoder上提交一個程序。100天過去了,小Ho查看自己的提交記錄發現有N天因爲貪玩忘記提交了。於是小Ho軟磨硬泡、強忍着小Hi鄙視的眼神從小Hi那裏要來M張"補提交卡"。每張"補提交卡"都可以補回一天的提交,將原本沒有提交程序的一天變成有提交程序的一天。小Ho想知道通過利用這M張補提交卡,可以使自己的"最長連續提交天數"最多變成多少天。
輸入
第一行是一個整數T(1 <= T <= 10),代表測試數據的組數。
每個測試數據第一行是2個整數N和M(0 <= N, M <= 100)。第二行包含N個整數a1, a2, ... aN(1 <= a1 < a2 < ... < aN <= 100),表示第a1, a2, ... aN天小Ho沒有提交程序。
輸出
對於每組數據,輸出通過使用補提交卡小Ho的最長連續提交天數最多變成多少。
3 5 1 34 77 82 83 84 5 2 10 30 55 56 90 5 10 10 30 55 56 90樣例輸出
76 59 100
#include <bits/stdc++.h> using namespace std; typedef long long ll ; typedef double dl ; #define INF 0x7f const int maxn =1e5+5; const int mod = 1000000007; #define f(i,l,r) for(int i=l;i<=r;++i) #define g(i,l,r) for(int i=l;i>=r;--i) int a[maxn]; int n,m; void slove() { int ans=0; m++; if(m>n) { ans=100; } else { f(i,m,n) { ans=max(ans,a[i]-a[i-m]-1); } } cout<<ans<<endl; } int main() { // freopen("in","r",stdin); int N; cin>>N; while(N--) { cin>>n>>m; f(i,1,n) cin>>a[i]; slove(); } // cout<<"hello"<<endl; return 0; }