题意
给你t组数据,每组数据包含一个数组a有n个数和k,下一行是对应是n个数。
最多课进行k次操作,可将两个下标对应的数取余k后的结果相同的进行交换位置。
操作完成后需选择k个连续的数进行相加,
问最后你所能得到的最大的数。
思路
坑点
1.并不是一定需要进行操作的,
若最初的数组中需进行k个数相加,恰巧最大的k个数相邻即不需要进行操作
代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e2+5;
int a[N];
int main ()
{
int t;//t组数据
cin>>t;
while(t--)//循环t次
{
int n,k;
cin>>n>>k;//输入n个数以及最多可进行的操作次数k
for(int i=1;i<=n;i++)
{
cin>>a[i];//遍历输入每个数
}
long long int sum=0;//最终的结果
for(int i=1;i<=k;i++)
{
int g=0;
for(int j=i;j<=n;j+=k)
{
g=max(g,a[j]);//找出最大值
}
sum+=g;//相加
}
cout<<sum<<endl;//输出结果
memset(a,0,sizeof(a));//每次的结果输出后需进行清空
}
retuern 0;
}
总结
需理清思路,进行模拟即可