C++ codejam问题“育儿伙伴关系”需要帮助
这个问题是4月4日在google codejam中提出的 问题描述如下: 卡梅隆和杰米的孩子快3岁了!然而,即使孩子现在更加独立,安排孩子的活动和家庭必需品对这对夫妇来说仍然是一个挑战 Cameron和Jamie有一个清单,上面列出了一天中要处理的N项活动。每项活动都在一天中指定的时间间隔内进行。他们需要将每个活动分配给其中一个,这样他们两个都不对重叠的两个活动负责。在时间t结束的活动不被视为与在时间t开始的另一个活动重叠 例如,假设Jamie和Cameron需要涵盖3个活动:一个从18:00到20:00,另一个从19:00到21:00,另一个从22:00到23:00。一种可能是杰米报道从19:00到21:00的活动,卡梅隆报道其他两个。另一个有效的时间表是Cameron负责18:00到20:00的活动,Jamie负责另外两个。请注意,前两个活动在19:00和20:00之间重叠,因此不可能将这两个活动分配给同一个合作伙伴 根据每项活动的开始和结束时间,找出不要求同一个人涵盖重叠活动的时间表,或者说这是不可能的 输入 输入的第一行给出了测试用例的数量,然后是T.T测试用例。每个测试用例从一行开始,该行包含一个整数N,即要分配的活动数。然后,又有N行。从1开始计数的第i行包含两个整数Si和Ei。第i个活动在午夜后的Si分钟开始,在午夜后的Ei分钟结束 输出 对于每个测试用例,输出一行包含用例x:y,其中x是从1开始的测试用例编号,如果没有符合上述规则的有效计划,则y是不可能的,否则将输出一个正好由N个字符组成的字符串。如果第i个活动在您的计划中分配给Cameron,则y中的第i个字符必须为C;如果分配给Jamie,则y中的第i个字符必须为J 如果有多个解决方案,您可以输出其中任何一个C++ codejam问题“育儿伙伴关系”需要帮助,c++,algorithm,C++,Algorithm,这个问题是4月4日在google codejam中提出的 问题描述如下: 卡梅隆和杰米的孩子快3岁了!然而,即使孩子现在更加独立,安排孩子的活动和家庭必需品对这对夫妇来说仍然是一个挑战 Cameron和Jamie有一个清单,上面列出了一天中要处理的N项活动。每项活动都在一天中指定的时间间隔内进行。他们需要将每个活动分配给其中一个,这样他们两个都不对重叠的两个活动负责。在时间t结束的活动不被视为与在时间t开始的另一个活动重叠 例如,假设Jamie和Cameron需要涵盖3个活动:一个从18:00到
Input :
4
3
360 480
420 540
600 660
3
0 1440
1 3
2 4
5
99 150
1 100
100 301
2 5
150 250
2
0 720
720 1440
Output :
Case #1: CJC
Case #2: IMPOSSIBLE
Case #3: JCCJJ
Case #4: CC
我的做法:
根据开始或结束时间对任务值进行排序,并检查是否可以将其分配给C或J。如果可以分配所有任务,则所有任务都很好,否则不可能
我尝试根据开始时间和结束时间进行排序,但两种情况下都得到了WA
如果有人能指出我在实现中缺少的东西,Qoulf将非常有帮助
我的代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct task
{
int start_time;
int finish_time;
task()
{
this->start_time=0;
this->finish_time=0;
}
task(int start_time, int finish_time)
{
this->start_time=start_time;
this->finish_time=finish_time;
}
bool operator<(const task t)
{
return this->start_time<t.start_time;
}
}task;
int main()
{
int t;
cin>>t;
int a=1;
while(t--)
{
int n,st,ft;
cin>>n;
char res[1005];
int index = 0;
vector<task> task_list;
for(int i=0;i<n;i++)
{
cin>>st>>ft;
task t1(st,ft);
task_list.push_back(t1);
}
sort(task_list.begin(),task_list.end());
task j_task, c_task;
for(int i=0;i<n;i++)
{
if(task_list[i].start_time>=j_task.finish_time)
{
j_task = task_list[i];
res[index++] = 'J';
}
else if(task_list[i].start_time>=c_task.finish_time)
{
c_task = task_list[i];
res[index++] = 'C';
}
else
{
index = 0;
break;
}
}
if(index!=0)
{
res[index] = '\0';
cout<<"Case #"<<a++<<": "<<res<<endl;
}
else
{
cout<<"Case #"<<a++<<": "<<"IMPOSSIBLE"<<endl;
}
}
return 0;
}
要求您将“C”或“J”分配给输入中给定任务的原始顺序。因此,在排序之前,您应该保存任务的索引,并在排序后,将“C”或“J”分配给保存的索引。Thank@lucieon。。。我应该正确地阅读这个问题…在哪里提到我们必须按原始顺序输出字符串。有没有提到,如果有多个解决方案,我们可以输出任何答案?。你能帮忙吗?