码迷,mamicode.com
首页 > 其他好文 > 详细

五一训练包E-5

时间:2021-05-04 16:07:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:范围   mem   pac   mes   --   就是   元素   链接   一个   

题目链接:https://vjudge.net/contest/436484#problem/E

题目的大致意思就是给俩数,分别是小数组的大小N和数目K,给的数组是递增的,方便后续的判断,将大数组分成K个小数组,数组的元素自己决定,但是要得到小数组的最大中位数和。

题意挺好理解的,接下来就是写程序了:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long a[200005]={0};
 4 int main(){
 5     long long t,n,m,sum,x;
 6     cin>>t;
 7     while(t--){ 
 8         cin>>n>>m;
 9         sum=0;
10         for(int i=1;i<=n*m;i++) cin>>a[i];
11         x=(n+1)/2;
12         if(x==1) for(int i=1;i<=n*m;i+=n) sum+=a[i];
13         else for(int i=n*m-(n-x),j=0;j<m;i-=(n-x+1),j++){
14              sum+=a[i];
15 //             printf("%lld ",a[i]);
16         }
17         cout<<sum<<endl;
18         memset(a,0,sizeof a);
19     }
20     return 0;
21 }

这个代码挺好理解的,就自己看那个样例就能找到规律

就比如说,当N=2或者1的时候,因为中位数都是小数组的第一个,就直接遍历一遍大数组就行;N等于其他值的时候可以发现要求中位数尽量大的话,就得让中位数之前的数字选在大数组的前面,中位数以及后面的数字从大数组后面开始选择,思路理清楚了,代码就好写了,不过得注意数组的值是刚好在int 范围内,中值就不仅仅在int 范围了,记得开long long来存就OK。

 

五一训练包E-5

标签:范围   mem   pac   mes   --   就是   元素   链接   一个   

原文地址:https://www.cnblogs.com/zm-23/p/14725866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!