给你t组数据,每组数据包含一个数组a有n个数和k,下一行是对应是n个数。
最多课进行k次操作,可将两个下标对应的数取余k后的结果相同的进行交换位置。
操作完成后需选择k个连续的数进行相加,
问最后你所能得到的最大的数。
1.并不是一定需要进行操作的,
若最初的数组中需进行k个数相加,恰巧最大的k个数相邻即不需要进行操作
- #include
- 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<
//输出结果 - memset(a,0,sizeof(a));//每次的结果输出后需进行清空
- }
- retuern 0;
- }
需理清思路,进行模拟即可