C. Dreamoon Likes Coloring-------------------------------------思维

在这里插入图片描述
在这里插入图片描述

题意:
给定长度为n的方块,有m种颜色,每种颜色可染长度为li 询问m种颜色每个颜色的起点是多少。使得最终所有方块被染色,且有m种不同颜色
解析:
每个颜色染色的起点应不小于自己序次对应的方格。

代码上有注释

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1000;
int n,m;
int a[N];
int b[N];
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&a[i]);
	}
	int pos=n+1;
	for(int i=m;i>=1;i--)
	{
		int k=max(pos-a[i],i);
		if(k<i||k>n-a[i]+1) //如果k<I说明肯定存在颜色被覆盖的情况,如果k>n-a[i]+1 肯定存在没有被染色的情况 所以都不行
		{
			cout<<-1<<endl;
			return 0;
		}
		b[i]=k;
		pos=k;
	}
	if(pos>1)
	{
		cout<<-1<<endl;
		return 0;
	}
	for(int i=1;i<=m;i++)
	{
		cout<<b[i]<<" ";
	}
	cout<<endl;
}

发布了572 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43690454/article/details/105334090