Hiring Staff CodeForces - 216C

原题链接
考察:贪心
思路:
  不知道具体分到哪类....总之是分情况讨论.
(1) k>1的情况,分为 m<=n-1 和 mn 两种情况
(2) k
1 分为3种情况.
   \(2.1\quad m<=n-2 和m==n-1 和 m==n\)
   其中\(m==n\)又要细分为\(n==2和n>2\)的情况

Code

#include <iostream>
#include <cstring>
using namespace std;
int n,m,k;
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	if(k>1&&m<n)
	{
		printf("%d\n",2*k);
		for(int i=1;i<=k;i++)
		  printf("1 ");
		if(k+1<=2*k) printf("%d ",n);
		for(int i=k+2;i<=2*k;i++)
		  printf("%d ",n+1);
		printf("\n");
	}else if(k>1&&m==n){
		printf("%d\n",2*k+1);
		for(int i=1;i<=k;i++)
		  printf("%d ",1);
		if(k+1<=2*k+1) printf("%d ",n);
		for(int i=k+2;i<=2*k;i++)
		  printf("%d ",n+1);
		printf("%d\n",2*n);
	}else if(k==1&&m<=n-2)
	{
		printf("%d\n",2);
		printf("%d %d\n",1,n);
	}else if(k==1&&m==n-1)
	{
		printf("3\n%d %d %d\n",1,n,2*n-1);
	}else{
		if(n>2) printf("3\n%d %d %d\n",1,n,2*n-1);
		else printf("4\n1 2 3 4\n");
	}
	return 0;
}
posted @ 2021-08-24 18:43  acmloser  阅读(40)  评论(0编辑  收藏  举报