Codeforces Round #428 (Div. 2) B.Game of the Rows(思维题/贪心)

题目

飞机每行座位如上图所示,共n(n<=1e4)行座位,

k(k<=100)个国家乘客,第i个国家ai(ai<=1e4)人,保证总和<=8n,

现在要求不同国家的不相邻,问是否存在可行方案

题解

水题,只是单纯地想写一波博客总结一下……

印象里10月有个学弟问过这个题,当时自己口胡了一下没做,

今天WA了四发,才觉得这个贪心思维题有点费劲……

注意把没能匹配成4的中间座位拆成2+1,再把没能匹配2的两边座位拆成1

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,k,v,a[5],four,two,one,mn;
bool ok()
{
	a[2]+=a[3];a[1]+=a[3];//3=2+1 不考虑3 
	mn=min(a[4],four);four-=mn;a[4]-=mn;//优先放满4
	a[2]+=2*a[4];//把4人拆成2+2 
	two+=four;one+=four;//把4座拆成2+1
	mn=min(a[2],two);two-=mn;a[2]-=mn;
	a[1]+=2*a[2];//把2人拆成1+1 
	one+=two;//把2座拆成1
	return one>=a[1]; 
}
int main()
{
	scanf("%d%d",&n,&k);
	four=n;two=2*n;
	for(int i=1;i<=k;++i)
	{
		scanf("%d",&v);
		a[4]+=v/4;
		if(v%4)a[v%4]++;
	}
	puts(ok()?"YES":"NO");
	return 0;
} 
发布了469 篇原创文章 · 获赞 53 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Code92007/article/details/104096537