codechef Cleaning Up 解决问题的方法

After a long and successful day of preparing food for the banquet, it is time to clean up. There is a list of n jobs to do before the kitchen can be closed for the night. These jobs are indexed from 1 to n.

Most of the cooks have already left and only the Chef and his assistant are left to clean up. Thankfully, some of the cooks took care of some of the jobs before they left so only a subset of the n jobs remain. The Chef and his assistant divide up the remaining
jobs in the following manner. The Chef takes the unfinished job with least index, the assistant takes the unfinished job with the second least index, the Chef takes the unfinished job with the third least index, etc. That is, if the unfinished jobs were listed
in increasing order of their index then the Chef would take every other one starting with the first job in the list and the assistant would take every other one starting with the second job on in the list.

The cooks logged which jobs they finished before they left. Unfortunately, these jobs were not recorded in any particular order. Given an unsorted list

of finished jobs, you are to determine which jobs the Chef must complete and which jobs his assitant must complete before closing the kitchen for the

evening.

Example

Input:
3
6 3
2 4 1
3 2
3 2
8 2
3 8

Output:
3 6
5
1

1 4 6
2 5 7

简单的分类题目了。

使用一个bool型,轮流模拟选jobs就能够了。

#pragma once
#include <vector>
#include <string>
#include <algorithm>
#include <stack>
#include <stdio.h>
#include <iostream>
using namespace std;

int CleaningUp()
{
	int T, n, m, j = 0;
	cin>>T;

	while (T--)
	{
		cin>>n>>m;
		bool finJobs[1001] = {0};
		vector<int> chefJobs, assiJobs;
		for (int i = 0; i < m; i++)
		{
			scanf("%d", &j);
			finJobs[j] = true;
		}
		bool turn = true;
		for (int i = 1; i <= n; i++)
		{
			if (!finJobs[i])
			{
				if (turn) chefJobs.push_back(i);
				else assiJobs.push_back(i);
				turn = !turn;
			}
		}
		for (int i = 0; i < (int)chefJobs.size(); i++)
		{
			printf("%d ", chefJobs[i]);
		}
		putchar(‘\n‘);
		for (int i = 0; i < (int)assiJobs.size(); i++)
		{
			printf("%d ", assiJobs[i]);
		}
		putc(‘\n‘, stdout);
	}
	return 0;
}

版权声明:笔者靖心脏,景空间地址:http://blog.csdn.net/kenden23/,只有经过作者同意转载。

时间: 10-22

codechef Cleaning Up 解决问题的方法的相关文章

codechef Cleaning Up 题解

After a long and successful day of preparing food for the banquet, it is time to clean up. There is a list of n jobs to do before the kitchen can be closed for the night. These jobs are indexed from 1 to n. Most of the cooks have already left and onl

1月31日 解决问题的方法( 麦肯锡七步成诗法 )

第一步:问题描述  1 明确企业要解决的基本问题  2 具体的.有内容的描述问题  3 清楚列示问题涉及的各方面信息 第二步:问题的分解 1 为何要进行分解  a 分解是提出假设的基础          提出假设          搜集资料          分析论证假设          完成咨询报告  b 理清思路         分解区分         设置优先顺序 2 问题分解的原则  a 内容是不是全面充分?  b 分解后的要素是不是相互独立? 3 问题分解的方法  a 不断提出假设

Hostspace组织培训活动——解决问题,方法先行

在日常工作中,大部分工作内容都是在"解决问题",解决问题是一个不断摆事实,找原因,提方案的过程.简单的问题依靠直线思维和经验判断就可解决,但碰上复杂问题时,常常由于主观认知先入为主或思考问题时缺少合理假设等原因导致头脑发热,被一些问题表面现象所迷惑,抓不住主要原因和问题本质.导致复杂问题简单化,想要考虑全面,却往往适得其反.总结起来,是我们在工作中缺少一套科学的分析与解决问题体系.完整的解决问题框架. 为了对公司成员解决问题的能力进行系统化的训练和提升,更好地履行各自的岗位职责,提高产

解决问题的方法

写一个帖子,出现问题,然后通过日志找到问题,最后解决问题的路径 问题:把mysql目录下的二进制日志删除了,发现mysql死活提不起来 解决: 第一步查看日志 tail -100 /var/lib/mysql/localhost.localdomain.err 发现没有一个文件,因为mysql每次都是读取bin.index文件的序列号,那么我把bin.index删除,然后启动mysql,看他是否创建最新的bin.index和binlog日志文件

HDU 1015 Safecracker 解决问题的方法

Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein safe behind a painting in the second-floor library. Klein safes are extremely rare; most of them, along with Klein and his factory, were destroyed in Wo

bzoj 3333: 排队计划 解决问题的方法

[原标题] 3333: 排队计划 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 161  Solved: 71 [Submit][Status] Description Input Output Sample Input 6 2 160 163 164 161 167 160 2 3 Sample Output 6 3 1 HINT Source wyx528命题 [分析]简述一下题目.N个数排成一列.每次指定一个位置P,然后把P~N中全部身高

Leetcode:minimum_depth_of_binary_tree解决问题的方法

一.     称号 并寻求最深的二元相似.给定的二进制树.求其最小深度. 最小深度是沿从根节点,到叶节点最短的路径. 二.     分析 当我看到这个题目时.我直接将最深二叉树的代码略微改了下,把max改成min.本以为应该没有问题,谁知道WA了两次,我静下来看了看.最终知道了,当遇到有结点为NULL时就得要结束了.所下面次再简单的题目也要静下来好好分析,不然会easy出错. /** * Definition for binary tree * struct TreeNode { * int v

解决问题—麦肯锡方法:解决问题的七个步骤

解决问题的过程是一个非常严谨的过程,任何一个环节的考虑是否全面.缜密.细致,都将决定结果的成败. 麦肯锡给出的解决问题的方法:分七个步骤 1.陈述问题 2.分析问题(问题树) 3.去掉所有非关键问题(漏斗方法) 4.制定详细的工作计划 5.进行关键分析 6.综合调查结果,并构建论证 7.讲故事(陈述来龙去脉) 解决问题-麦肯锡方法:解决问题的七个步骤,布布扣,bubuko.com

2016年程序员如何提高自己的方法有哪些?

作为软件开发行业,新技术在不断的更新,如何在新的时代实现自己的人生价值,唯一的办法就是为自己树立一个更高的目标,一个人有了目标后就会有了努力的方向,那么在2016年程序员如何提高自己的方法有哪些?新霸哥简单的总结了一下主要的有下面的这些方面来努力就能有所作为的. 一,方向很重要,选好方向才有学习的动力 如今技术新技术在不断的被挖掘出来,选择一个合适的方向是很重要的.新霸哥觉得有些技术虽然很重要但是不是任何人都能掌握的,遇到这种情况的时候首先要学会取舍,舍弃看不懂的知识,与其在一个不懂的问题上长期