感觉没什么问题呀,有没有大佬给个数据
查看原帖
感觉没什么问题呀,有没有大佬给个数据
1501023
zz432383楼主2024/11/8 08:54
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <set>
#include <vector>
using namespace std;
bool cmp(int a, int b)
{
	return a > b;
}

int main()
{
	int n, p, q;
	cin >> n >> p >> q;
	vector<int>vec;
	int x;
	for (int i = 0; i < n; i++)
	{
		cin >> x;
		vec.push_back(x);
	}
	sort(vec.begin(), vec.end());
	int max0, max1, count = 0;
	int len = vec.size();
	sort(vec.begin(), vec.end());
	for (int i = 0; i < p; i++)
	{
		max0 = 0;
		max1 = 0;
		for (int j = max(0, len - count - 2); j < vec.size(); j++)
			if (vec[j] > vec[max0])
				max0 = j;
		for (int j = max(0, len - count - 2); j < vec.size(); j++)
			if (vec[j] > vec[max1] && j != max0)
				max1 = j;
		if (sqrt(vec[max0]) == (int)sqrt(vec[max0]))
			if ((int)sqrt(vec[max0]) % 2)
				if (vec[max0] - vec[max1] == 1)
					if (q > 0)
					{
						vec[max1] = (int)sqrt(vec[max1]);
						continue;
					}
		vec[max0] = (int)sqrt(vec[max0]);
		count++;
		if (count > 9999)
		{
			sort(vec.begin(), vec.end());
			count = 0;
		}
	}
	sort(vec.begin(), vec.end());
	for (int i = 0; i < q; i++)
	{
		max0 = 0;
		for (int j = max(0, len - count - 2); j < vec.size(); j++)
			if (vec[j] > vec[max0])
				max0 = j;
		vec[max0] = vec[max0] / 2;
		if (count > 9999)
		{
			sort(vec.begin(), vec.end());
			count = 0;
		}
	}
	int sum = 0;
	for (auto i = vec.begin(); i < vec.end(); i++)
		sum += *i;
	cout << sum;
	return 0;
}
2024/11/8 08:54
加载中...