F. Lizard Era: Beginning

Time Limit: 1 Sec

Memory Limit: 256 MB

题目连接

http://codeforces.com/contest/586/problem/F

Description

In the game Lizard Era: Beginning the protagonist will travel with three companions: Lynn, Meliana and Worrigan. Overall the game has n mandatory quests. To perform each of them, you need to take exactly two companions.

The attitude of each of the companions to the hero is an integer. Initially, the attitude of each of them to the hero of neutral and equal to 0. As the hero completes quests, he makes actions that change the attitude of the companions, whom he took to perform this task, in positive or negative direction.

Tell us what companions the hero needs to choose to make their attitude equal after completing all the quests. If this can be done in several ways, choose the one in which the value of resulting attitude is greatest possible.

Input

The first line contains positive integer n (1 ≤ n ≤ 25) — the number of important tasks.

Next n lines contain the descriptions of the tasks — the i-th line contains three integers li, mi, wi — the values by which the attitude of Lynn, Meliana and Worrigan respectively will change towards the hero if the hero takes them on the i-th task. All the numbers in the input are integers and do not exceed 107 in absolute value.

​​,C​i​​,即此题的初始分值、每分钟减少的分值、dxy做这道题需要花费的时间。

Output

If there is no solution, print in the first line "Impossible".

Otherwise, print n lines, two characters is each line — in the i-th line print the first letters of the companions' names that hero should take to complete the i-th task ('L' for Lynn, 'M' for Meliana, 'W' for Worrigan). Print the letters in any order, if there are multiple solutions, print any of them.

Sample Input

7
0 8 9
5 9 -2
6 -8 -7
9 4 5
-4 -9 9
-4 5 2
-6 8 -7

Sample Output

LM
MW
LM
LW
MW
LM
LW

HINT

题意

有n个任务,有三个人

每次任务都必须派两个人出去,每个任务都会使得人涨能力值,不同人涨的不一样

然后问你有没有一种方案可以使得所有人最后的能力值都一样

如果有多种方案,请输出可以最后使得能力值最大的一种方案

题解:

meet in the mid,状态存三个量就好了A,A-B,B-C,然后就可以瞎搜了,注意最后要输出方案,所以就直接把中间的过程都状压一下就行了

代码:

#include<iostream>
#include<stdio.h>
#include<map>
#include<vector>
using namespace std; int mid,n;
int a[],b[],c[];
map<pair<int,int> ,pair<int,long long> >H;
pair<int,long long> ans;
void dfs1(int step,long long sta,int A,int B,int C)
{
if(step==mid+)
{
pair<int,long long> temp;
temp = H[pair<int,int>(A-B,B-C)];
if(temp.second == )
H[pair<int,int>(A-B,B-C)] = pair<int,long long>(A,sta);
else
H[pair<int,int>(A-B,B-C)] = max(temp,pair<int,long long>(A,sta));
return;
}
dfs1(step+,sta<<|,A,B+b[step],C+c[step]);
dfs1(step+,sta<<|,A+a[step],B,C+c[step]);
dfs1(step+,sta<<|,A+a[step],B+b[step],C);
}
void dfs2(int step,long long sta,int A,int B,int C)
{
if(step==n+)
{
pair<int,long long> temp = H[pair<int,int>(B-A,C-B)];
if(temp.second==)return;
ans = max(ans,pair<int,long long>(A+temp.first,temp.second<<(n-mid<<)|sta));
return;
}
dfs2(step+,sta<<|,A,B+b[step],C+c[step]);
dfs2(step+,sta<<|,A+a[step],B,C+c[step]);
dfs2(step+,sta<<|,A+a[step],B+b[step],C);
}
int main()
{
ans.first = -;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
mid = (n+)/;
dfs1(,,,,);
dfs2(mid+,,,,);
if(ans.first == -)return puts("Impossible");
vector<int> Ans;
for(int i=;i<=n;i++)
{
Ans.push_back(ans.second&);
ans.second>>=;
}
for(int i=Ans.size()-;i>=;i--)
{
if(Ans[i]==)
cout<<"LM"<<endl;
else if(Ans[i]==)
cout<<"LW"<<endl;
else
cout<<"MW"<<endl;
} }

Codeforces Round #325 (Div. 2) F. Lizard Era: Beginning meet in the mid的更多相关文章

  1. Codeforces Round #325 (Div. 1) D. Lizard Era: Beginning

    折半搜索,先搜索一半的数字,记录第一个人的值,第二个人.第三个人和第一个人的差值,开个map哈希存一下,然后另一半搜完直接根据差值查找前一半的答案. 代码 #include<cstdio> ...

  2. Codeforces Round #485 (Div. 2) F. AND Graph

    Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...

  3. Codeforces Round #486 (Div. 3) F. Rain and Umbrellas

    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  4. Codeforces Round #501 (Div. 3) F. Bracket Substring

    题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...

  5. Codeforces Round #499 (Div. 1) F. Tree

    Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...

  6. Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)

    题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...

  7. Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)

    题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...

  8. Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)

    题目地址:http://codeforces.com/contest/474/problem/F 由题意可知,最后能够留下来的一定是区间最小gcd. 那就转化成了该区间内与区间最小gcd数相等的个数. ...

  9. Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (简单dp)

    题目:https://codeforces.com/problemset/problem/977/F 题意:一个序列,求最长单调递增子序列,但是有一个要求是中间差值都是1 思路:dp,O(n)复杂度, ...

随机推荐

  1. OM Price Lists

      --select * --from org_organization_definitions; --execute fnd_client_info.set_org_context(111); -- ...

  2. C/C++中static关键词的作用

    1.在函数体内的static变量作用范围是该函数体,其只被内存分配一次,所以在下次调用的时候会保持上一次的值. 2.模块内的static全局变量可以被模块内的所有函数访问,但不能被模块外的函数访问. ...

  3. linux mount 命令详解

    命令格式: mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型. ...

  4. POJ (线段相交 最短路) The Doors

    题意: 一个正方形中有n道竖直的墙,每道墙上开两个门.求从左边中点走到右边中点的最短距离. 分析: 以起点终点和每个门的两个端点建图,如果两个点可以直接相连(即不会被墙挡住),则权值为两点间的欧几里得 ...

  5. BZOJ2882: 工艺

    题解: 裸的字符串最小表示... 可以戳这里:http://www.cnblogs.com/ACAC/archive/2010/05/23/1742349.html 这里说一下为什么a[i+k]> ...

  6. Can not perform pod install under el capitan (15A279b)

    这个问题在stackoverflow上面有过讨论: Can not perform pod install under el capitan (15A279b) 被采纳的答案为:sudo gem in ...

  7. insert /*+APPEND*/ 各种insert 插入速度比较

    SQL> select count(*) from t;COUNT(*)----------5442048****************************SQL> alter ta ...

  8. 【转】Bluetooth数据包捕获

    原文网址:http://www.cnblogs.com/hzl6255/p/3887013.html 这里介绍一种在Android上捕获蓝牙数据包的方法 1. 前提 首先你要有一部Android手机  ...

  9. 初识NuGet - 概念, 安装和使用

    1. NuGet是什么? NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update l ...

  10. Sql2005 全文索引详解

    1.前言 14.1  全文索引的介绍 14.2  全文索引中常用的术语 14.3  全文索引的体系结构 14.4  全文目录管理 14.4.1  创建全文目录 14.4.2  查看与修改全文目录 14 ...