我猜了一个结论,能合并就合并,到了必须要敌对交易的时候才进行敌对交易。

然后合并的话,肯定是拿最大的两个去合并。

至于敌对交易,肯定是干掉对方最大的公司才是有意义的。

于是各种分类讨论。。。看代码好了。。。

#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
#define N 100000 + 5 int _, n, m;
priority_queue <LL> Q[]; inline LL getint()
{
char ch = '\n';
for (; ch > '' || ch < ''; ch = getchar()) ;
LL res = ch - '';
for (ch = getchar(); ch >= '' && ch <= ''; ch = getchar())
res = (res << ) + (res << ) + ch - '';
return res;
} inline bool Solve() // 返回赢家的编号 (0 或 1)
{
for (int op = ; ; op ^= )
{
if (Q[op].empty()) return op ^ ; // Section 1 : 如果当前公司没有分公司了,自然赢家是对方。
if (Q[op].size() == ) // Section 2 : 如果当前公司只剩一个分公司
{
if (Q[op].top() < Q[op ^ ].top()) // Case 1 : 如果对方最值钱的公司比自己这个公司还值钱,自然赢家是对方。
return op ^ ;
else if (Q[op].top() == Q[op ^ ].top() && Q[op ^ ].size() == ) // Case 2 : 两边都只剩一个分公司,而且价值都一样,那么平局,赢家算后手。
return ;
else if (Q[op].top() > Q[op ^ ].top()) Q[op ^ ].pop(); // Case 3 : 这里只能进行敌对交易。
}
else // Section 3 : 如果当前公司有很多分公司
{
LL Max_1 = Q[op].top();
Q[op].pop();
LL Max_2 = Q[op].top();
Q[op].push(Max_1);
if (Q[op ^ ].size() == ) // Case 1 : 如果对方只有一个分公司,那么当前公司只管合并就行了。
{
Q[op].pop(), Q[op].pop();
Q[op].push(Max_1 + Max_2);
}
else
{
LL _Max_1 = Q[op ^ ].top();
if (_Max_1 >= Max_1) // Case 2 : 如果当前公司最大的分公司不及对方最大的分公司,那么只能合并。
{
Q[op].pop(), Q[op].pop();
Q[op].push(Max_1 + Max_2);
}
else
{
Q[op ^ ].pop();
LL _Max_2 = Q[op ^ ].top();
Q[op ^ ].push(_Max_1);
if (_Max_1 + _Max_2 >= Max_1 + Max_2)
{ // Case 3 : 如果当前公司前两大的分公司价值和小于等于对方前两大的分公司价值和,那必须要敌对交易了,否则主动权就不在自己这边了。
Q[op ^ ].pop();
}
else // Case 4 : 如果当前公司前两大的分公司价值和大于对方前两大的分公司价值和,那么就算合并了主动权也在自己这边,那就合并呗。
{
Q[op].pop(), Q[op].pop();
Q[op].push(Max_1 + Max_2);
}
}
}
}
}
} int main()
{
#ifndef ONLINE_JUDGE
freopen("3983.in", "r", stdin);
freopen("3983.out", "w", stdout);
#endif while (scanf("%d%d", &n, &m) == )
{
while (!Q[].empty()) Q[].pop();
while (!Q[].empty()) Q[].pop();
for (int i = ; i <= n; i ++) Q[].push(getint());
for (int i = ; i <= m; i ++) Q[].push(getint());
bool winner = Solve();
printf("Case %d: ", ++ _);
puts(winner == ? "Takeover Incorporated" : "Buyout Limited");
} #ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return ;
}

BZOJ 3983 Takeover Wars 解题报告的更多相关文章

  1. BZOJ 4619 Swap Space 解题报告

    今天是因为David Lee正好讲这个题的类似题,我才做了一下. 本题是world final 2016的一道水…… 题目地址如下 http://www.lydsy.com/JudgeOnline/p ...

  2. BZOJ 2839: 集合计数 解题报告

    BZOJ 2839: 集合计数 Description 一个有\(N\)个元素的集合有\(2^N\)个不同子集(包含空集),现在要在这\(2^N\)个集合中取出若干集合(至少一个),使得 它们的交集的 ...

  3. BZOJ 1367 [Baltic2004]sequence 解题报告

    BZOJ 1367 [Baltic2004]sequence Description 给定一个序列\(t_1,t_2,\dots,t_N\),求一个递增序列\(z_1<z_2<\dots& ...

  4. BZOJ 1044 木棍分割 解题报告(二分+DP)

    来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...

  5. BZOJ 4341 [CF253 Printer] 解题报告

    乍一看这个题好像可以二分优先度搞搞... 实际上能不能这么搞呢...? 我反正不会... 于是开始讲我的乱搞算法: 首先肯定要把任务按照优先度排序. 用一棵在线建点的线段树维护一个时刻是否在工作. 然 ...

  6. BZOJ 4036 [HAOI2015] Set 解题报告

    首先我们不能一位一位的考虑,为什么呢? 你想想,你如果一位一位地考虑的话,那么最后就只有 $n$ 个数字,然而他给了你 $2^n$ 个数字,怎么看都不对劲呀.(我是因为这样子弄没过样例才明白的) 所以 ...

  7. BZOJ 3288 Mato矩阵 解题报告

    这个题好神呀..Orz taorunz 有一个结论,这个结论感觉很优美: $$ans = \prod_{i=1}^{n}\varphi(i)$$ 至于为什么呢,大概是这样子的: 对于每个数字 $x$, ...

  8. BZOJ 4123 [Baltic2015] Hacker 解题报告

    首先,Alice 会选择一个长度为 $\lfloor\frac{n+1}{2}\rfloor$ 的区间,我们把这个长度记为 $len$. 有这么一个结论:令 $F_i$ 为覆盖 $i$ 点的所有长度为 ...

  9. BZOJ 4146 [AMPPZ2014] Divisors 解题报告

    这个题感觉比较小清新... 我们记录每个数出现的次数 $T_i$. 首先依次枚举每个数字,令 $ans = ans + T_i \times (T_i - 1)$,然后枚举这个数的倍数,令 $ans ...

随机推荐

  1. 关于Eclipse开发插件(三)

    视图之间实现事件监听 两个视图中的组件之间的互动,在开发插件的时候是经常碰到的问题.点击视图1列表的某项时,视图2的文本框显示相应的字符. 第一种主动式: 主动式就是在视图1的代码块中获取对视图2的对 ...

  2. 在安卓下使用python连接蓝牙串口模块(HC-06)

    在安卓上安装Python: 请参考:https://github.com/kuri65536/python-for-android/blob/master/README.md下载程序文件需要访问 ht ...

  3. js 刷新页面自动回到顶部

    <script type="application/x-javascript"> addEventListener("load", function ...

  4. maven打包技巧

    http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package/ "打包"这个词听起来比较土,比较正式的说法应该是"构建 ...

  5. hhgis驱动

    function loadPathInfo 在car.js中 function loadPathInfo(carid, fnClass) { var qureydrive; if (jsonp) qu ...

  6. 转-----EasyCHM制作教程

    希望以后自己的笔记能够整理成 chm 格式的文档 制作过CHM帮助文件的同志们可能都遇到过以下两个问题: 1.制作好的CHM文件图像.公式不显示. 2.制作好的CHM文件在自己电脑上能显示,在别人电脑 ...

  7. jsp页面在IE8下文本模式自动为“杂项(Quirks)”导致页面显示错位

    最近在修改网站的响应式的页面时,由于都是套样式页面,修改过程都是粘贴复制,导致了一些细节问题在IE8下暴露出来: 遇到的问题就是在在Chrome,火狐页面都正常,唯独在IE8下页面样式显示乱样了,但是 ...

  8. iOS调试程序时,启动应用失败的解决办法

    最近在iOS项目中调试程序,项目中用到第三方应用来启动我的应用程序,调试阶段在实体机上用第三方应用启动我的应用时,出现如下错误,程序停止运行: 同时,在AppDelegate对象的如下方法中设置断点: ...

  9. javascript学习笔记20160121-css选择器

    元素可以用id.标签名或类来描述: 更一般的,元素可以基于属性来选取: 这些基本的选择器可以组合使用: 选择器可以指定文档结构(重要,之前一直不太明白>的使用): 选择器可以组合起来选取多个或多 ...

  10. 学习C++ Primer 的个人理解(六)

    第四章和第五章没什么特别的.基本上就是书本上的字面意思,也没什么需要注意的细节.直接记录第六章. 本章介绍了函数,其实也没什么特别的.但有几个重点 1.形参的类型决定了形参和实参的交互方式.形参是引用 ...