苹果消消乐c++

时间:2024-11-21 07:51:57

题目描述

有100个苹果和香蕉排成一条直线,其中有N个香蕉,你可以使用至多M次魔法道具将香蕉变成苹果,最后“最长的连续苹果数量”即为你本次苹果消消乐的得分,给定苹果和香蕉的排列,求你能获得的最大得分。

输入

第一行是一个整数T(1 <= T <= 10),代表测试数据的组数。 每个测试数据第一行是2个整数N和M(0 <= N, M <= 100)。第二行包含N个整数a1, a2, ... aN(1 <= a1 < a2 < ... < aN <= 100),表示第a1, a2, ... aN个位置上摆放的是香蕉。

输出

对于每组数据,输出通过使用魔法道具后你能获得的最大得分。

样例

输入

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

来源

电子学会三级 202103真题

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //计算最大长度
  4. void fun(int n,int m,int a[]){
  5. int ma=0;
  6. if(m>=n)ma=100;//如果道具次数大于香蕉的个数,能把香蕉全变成苹果,不用算,直接得100
  7. else {
  8. int s;
  9. for(int i=m+1;i<=n+1;i++){//3 2 10 50 90
  10. s=a[i]-1-a[i-m-1];
  11. if(s>ma)ma=s;
  12. }
  13. }
  14. cout<<ma<<endl;
  15. }
  16. int main(){
  17. int t,n,m,i,j;//n个香蕉,m个道具,t组数据
  18. cin>>t;
  19. for(i=1;i<=t;i++){
  20. cin>>n>>m;
  21. int a[102]={0};
  22. for(j=1;j<=n;j++)cin>>a[j];//香蕉的位置
  23. a[0]=0;//在最前面和最后面添加一个香蕉
  24. a[n+1]=101;
  25. fun(n,m,a);
  26. }
  27. return 0;
  28. }