站外题求助
  • 板块灌水区
  • 楼主cosmicvoyage
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/6 10:28
  • 上次更新2024/10/6 10:48:41
查看原帖
站外题求助
1015339
cosmicvoyage楼主2024/10/6 10:28

题目内容

小 A 有 nn 张卡牌,这 nn 张卡牌初始时都放在桌子上,第 ii 张上写有一个非负整数 aia_i

接下来小 A 会选出一些卡牌,第一轮他会从桌子上选出一张上面写有奇数的卡牌拿到手上,第二轮他会选出一张上面写有偶数的卡牌拿到手上,以此类推,轮数为奇数时他需要选一张上面写有奇数的卡牌,轮数为偶数时他需要选一张写有偶数的卡牌。

小 A 可以一直进行选牌操作,直到他一共选出了 kk 张牌拿在手上,或者某一轮的时候他没有对应奇偶性的牌可拿了。小 A 想要知道他选出的牌上的数字和最大是多少?

输入格式

第一行两个整数 n,kn,k,表示卡牌数量和小 A 最多选几张牌。

第二行 nn 个以空格分隔的非负整数 a1,a2,,ana_1,a_2,\dots, a_n

输出格式

输出一行一个整数表示答案。

【数据范围】

对于 40%40\% 的数据,n1000n\le 1000

对于另外 20%20\% 的数据,保证 nn 为偶数且 a1,a2,,ana_1,a_2,\dots, a_n 中偶数和奇数都各有 n2\frac{n}{2} 个。

对于 100%100\% 的数据,1n1051\le n\le 10^51kn1\le k\le n0ai10000\le a_i\le 1000

代码

#include <iostream>
#include <algorithm>
using namespace std;
signed main()
{
	int n,k,a[100005],x[100005],y[100005],sum=0,num=0,ans=0,m;
	cin>>n>>k;
	if(n%2==0)
	{
		m=2;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(i%2!=0)
		{
			sum++;
			x[i]=a[i];
		}
		else
		{
			num++;
			y[i]=a[i];
		}
	}
	sort(x+1,x+sum+1);
	sort(y+1,y+num+1);
	for(int i=n;i>=n-k+1;i--)
	{
		if(m==1)
		{
			if(x[i]!=0)
			{
				ans+=x[i];
			}
			else
			{
				cout<<ans;
				return 0;
			}
		}
		else
		{
			if(y[i]!=0)
			{
				ans+=y[i];
			}
			else
			{
				cout<<ans;
				return 0;
			}
		}
		if(m==2)
		{
			m--;
		}
		else
		{
			m++;
		}
	}
	return 0;
}
2024/10/6 10:28
加载中...