D. Lizard Era: Beginning
http://codeforces.com/contest/585/problem/D
1、meet in the middle 里上半部分搜索为d1()、下半部分搜索为d2(),
d1()的内容很简单:搜索,直到超过边界,记录状态值,
d2()的内容也很简单:搜索,直到超过边界,合并d1()状态值,按照题目做出处理
2、设d1()搜索出的三个值为a、b、c,d2()为a'、b‘、c’,要求a+a‘==b+b'、a+a'==c+c',
但因为a、a'不在一个函数里,我们变形为a-b=b'-a'、a-c=c'-a'。
为了方便,我们把a-b、a-c放入一个数字s里,a'-b'、a'-c'放入一个数字s'里,有s==s'即可得到三个attitude相等。
因为a-c最大为2e7,我们把a-b扩大2e7倍再与a-c相加就得到s
3、题目还要求最后的attitude不仅要相等,还要尽量最大,
对于每个s,我们记录其a值,将<s,a>存入HashMap,就可在d2()里得到a+a'
题目还要求打印步骤,对于每个状态s,我们用一个3进制数表示步骤,将<s,k>存入HashMap
1 static final int max = (int) (3e7 + 100); 2 static int[] a = new int[1000]; 3 static int[] b = new int[1000]; 4 static int[] c = new int[1000]; 5 static int n; 6 7 static HashMap<Long, Integer> maa = new HashMap<>(); 8 static HashMap<Long, Integer> mk = new HashMap<>(); 9 10 //最终答案的a值 11 static long ansaa = Long.MIN_VALUE; 12 //表示d1各步骤的3进制数、表示d2各步骤的3进制数 13 static long ansk1, ansk2; 14 15 public static void main(String[] args) { 16 17 IO io = new IO(); 18 n = io.nextInt(); 19 for (int i = 0; i < n; i++) { 20 a[i] = io.nextInt(); 21 b[i] = io.nextInt(); 22 c[i] = io.nextInt(); 23 } 24 25 d1(0, 0, 0, 0, 0); 26 d2(n / 2 + 1, 0, 0, 0, 0); 27 if (ansaa == Long.MIN_VALUE) io.println("Impossible"); 28 else { 29 String[] s = new String[]{"LM", "LW", "MW"}; 30 int[] ans = new int[n]; 31 //第一步被无限*3,最后一步没有*3,不难发现是倒叙 32 for (int i = n / 2; i >= 0; i--, ansk1 /= 3) ans[i] = (int) ansk1 % 3; 33 for (int i = n - 1; i > n / 2; i--, ansk2 /= 3) ans[i] = (int) ansk2 % 3; 34 for (int i = 0; i < n; i++) io.println(s[ans[i]]); 35 } 36 } 37 38 //[0,n/2],k是记录步骤的3进制 39 static void d1(int task, int aa, int bb, int cc, int k) { 40 if (task > n / 2) { 41 long s = (aa - bb) * max + aa - cc; 42 if (maa.containsKey(s) == false || maa.get(s) < aa) { 43 maa.put(s, aa); 44 mk.put(s, k); 45 } 46 return; 47 } 48 d1(task + 1, aa + a[task], bb + b[task], cc, k * 3); 49 d1(task + 1, aa + a[task], bb, cc + c[task], k * 3 + 1); 50 d1(task + 1, aa, bb + b[task], cc + c[task], k * 3 + 2); 51 } 52 53 54 //[n/2+1,n-1] 55 static void d2(int task, long aa, int bb, int cc, long k) { 56 if (task > n - 1) { 57 long s = (bb - aa) * max + cc - aa; 58 if (maa.containsKey(s)) if (maa.get(s) + aa > ansaa) { 59 ansaa = maa.get(s) + aa; 60 ansk1 = mk.get(s); 61 ansk2 = k; 62 } 63 return; 64 } 65 d2(task + 1, aa + a[task], bb + b[task], cc, k * 3); 66 d2(task + 1, aa + a[task], bb, cc + c[task], k * 3 + 1); 67 d2(task + 1, aa, bb + b[task], cc + c[task], k * 3 + 2); 68 }
转载于:https://www.cnblogs.com/towerbird/p/11240217.html
D. Lizard Era: Beginning相关推荐
- Lizard Era: Beginning
Lizard Era: Beginning 题面翻译 有 n ( n ⩽ 25 ) n(n \leqslant 25) n(n⩽25)个任务和三个人,每次任务给出每个人能得到的值,每次任务选两个人,使 ...
- era翻译_英语单词era是什么意思,英文单词查询era,在线单词era翻译
era 简明英汉词典 era [5iErE] n. 时代, 纪元, 时期, [地]代 基本词义 Era [5iErE] 耐蚀耐热合金钢 基本词义 ERA =Electrical Research As ...
- era翻译_era是什么意思_era的翻译_音标_读音_用法_例句_爱词霸在线词典
全部 四级 六级 考研 This is something that is very much well worth considering here in the modern era. 出自-20 ...
- pandas将dataframe日期数据列的日期转化为日期当月第一天(每月1号)的日期并生成新的数据列(Setting date to beginning of month in dataframe)
pandas将dataframe日期数据列的日期转化为日期当月第一天(每月1号)的日期并生成新的数据列(Setting date to beginning of month in dataframe) ...
- Beginning IOS 7 Development Exploring the IOS SDK - Handling Basic Interface Fun
Beginning IOS 7 Development Exploring the IOS SDK 目前使用的是Objective-C,用这本书,简单记录一下 第一章,图书简介 第二章,简要介绍使用x ...
- BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结 本章节向你介绍了SP平台上event recei ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)...
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- Windows蓝屏(Beginning Dump of Physical Memory)
为什么Windows 2000/XP会蓝屏? NT内核的操作系统采用的是分层管理结构(层又称为模式),主要有用户层(User Mode)和内核层(Kernel Mode),我们可以通过下面这个形象的比 ...
- python插件安装错误解决办法之SyntaxError: from __future__ imports must occur at the beginning of the file原因
今天在用到SOAPpy做webservice的过程当中,要进行安装SOAPpy.SOAPpy0.11版本安装没有问题,但在安装其以上版本时发现SyntaxError: from __future__ ...
- An Introduction to Hashing in the Era of Machine Learning
In December 2017, researchers at Google and MIT published a provocative research paper about their e ...
最新文章
- 在线作图|FAPROTAX数据库在线注释
- 封装方法公共文件common.js
- [watevrCTF-2019]Pickle Store
- HighNewTech:2019.08.08华为发布—面向2025十大趋势
- 【转】java 自动装箱与拆箱
- 阿里云服务器本地连接(windows) 阿里云服务器和本地的磁盘共享数据
- 带你了解zabbix整合ELK收集系统异常日志触发告警~
- linux网卡限速tc,linux tc 对本机网卡限速
- iphone开发之C++和Objective-C混编
- java string 栈_Java堆和栈的区别(String类)
- java日期格式化、解析
- Shell脚本编程之(五)条件判断式
- 幕客网学习摘要记录1
- 刚刚,2020年中国信息通信技术服务大会盛大召开!
- 基于PaddleX的垃圾分类识别
- PHP 下载文件的方法(指定路径)
- 2019产品数据管理(PDM)技术说明
- 隐藏高德地图左下角LOGO
- 卡方检验——离散型特征相关性分析
- HDU - 4598 Difference
热门文章
- 瑞幸咖啡“生死劫”:财务数据曾惊天造假,一年巨亏几十亿美元
- Rabbit MQ 基础
- 企业运维实战--MFS分布式文件系统
- Exchange邮箱服务器后利用
- 装机出现“我们检测到您的硬盘是GPT格式但未找到ESP分区”解决方法
- latex强制图片标题居中
- 编译原理实验三 自下而上语法分析
- win10下装win7双系统_win10下怎么装win8系统 win10下装win8系统方法【详细教程】
- python合并word表格_Python实战009:读取Word文档中的表格数据及表格合并问题解决...
- 126邮箱自动登录程序