贪心_限制数字的范围的取模的技巧_偶数的性质_1883_C. Raspberries

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

const int N=2e5+10;

int a[N];

void solve()
{
	int n,k;
	cin>>n>>k;
	
	for(int i=0;i<n;i++)
		cin>>a[i];
	
	int ans=1e9;
	for(int i=0;i<n;i++)
	{
		if(a[i]%k==0)
			ans=0;
		int t=k-(a[i]+k)%k;
		ans=min(ans,t);
	}
	
	if(k==4)
	{
		int cnt=0;
		for(int i=0;i<n;i++)
			if(a[i]%2==0)
				cnt++;
		
		if(cnt>=2)
			ans=0;
		else if(cnt==1&&n-cnt>=1)
			ans=min(ans,1);
		else if(n-cnt>=2)
			ans=min(ans,2);
	}
	
	cout<<ans<<endl;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t;
	cin>>t;
	
	while(t--)
		solve();
	
	return 0;
}

该题是一个一千分的动态规划和数学,虽然和我之前学的动态规划大相径庭

我感觉这题更像是一个贪心

首先是所有的数据都非常小,然后给的除数也是在一到五这个范围内,一根本不用考虑,因为一可以整除所有的正整数

剩下一个四和三个质数

四的话,需要另外考虑,两个偶数的乘积一定可以被四整除,因为偶数可以分解质因子出来一个二,两个偶数两个二,相乘就是四

对于另外几个除数,只需要考虑,一个数组元素经过最少多少次操作可以被该除数整除,贪心策略去一个最小值即可

下面这一行代码可以保证数组元素一定在除数的范围内,属于一个非常常见的技巧

cpp 复制代码
int t=k-(a[i]+k)%k;

偶数的个数大于二,并且除数是四的话,答案就是零,有一个偶数和不少于一个奇数,答案是用贪心策略和一取最小值,没有偶数,只有两个以上的奇数,答案是贪心策略和二取最小值

这个是div 3的第三个题,还是没有非常大的难度

相关推荐
“AI国潮设计-小江”1 小时前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
lhbweilai1 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
努力努力再努力wz1 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
咩咩啃树皮2 小时前
JavaScript 中 this 指向为什么总在变?
开发语言·前端·javascript
程序员清风2 小时前
算法题中的边界条件、测试与调试
开发语言·算法·kotlin
砚底藏山河2 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融
十五年专注C++开发2 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
艾络迅Acceleronix2 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
CodeYp20192 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
Zwawa2 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式