2015北京区域赛现场赛第2题。

题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf

OJ链接:http://hihocoder.com/problemset/problem/1255

题意:给4个矩形的宽和高,问能否选出3个拼成一个大矩形。

解法:可以称之为构造、暴力、枚举、搜索

当时场上写了个很无脑的版本,变量a,b,c一个个枚举,没有可扩展性。

其实稍加分析,把判断和枚举的两个模块独立开来:

  1. 判断的过程每次都只针对一个由3*2个数构成的序列,实现比较直观,只有两种构造方法,见代码;

  2. 一共有(4!) * (2^3)个不同的序列,所以枚举的过程可转化为两个独立的子问题:求4个数的全排列和3个二值量所有取值向量。

  全排列可借助next_permutation方便地得到。k个二值量的所有取值向量可以通过[0,2^k]的整数的二进制表示得到。

  由于是二值量,直接先swap再交换回来即可。注意swap传引用。

  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. struct Rec{
  6. int w, h;
  7. Rec& operator = (Rec& r){
  8. w = r.w;
  9. h = r.h;
  10. return *this;
  11. }
  12. }rec[];
  13.  
  14. int n;
  15. int index[];
  16.  
  17. void swap(Rec& r){ //注意传引用
  18. int temp = r.w;
  19. r.w = r.h;
  20. r.h = temp;
  21. }
  22.  
  23. void reverse(int x){
  24. for(int i=; i<; i++){
  25. if(x&){
  26. swap(rec[index[i]]);
  27. }
  28. x >>= ;
  29. }
  30. }
  31.  
  32. bool judge(){
  33. int ans = false;
  34.  
  35. if(rec[index[]].w == rec[index[]].w
  36. && rec[index[]].w == rec[index[]].w )
  37. ans = true;
  38. else if(rec[index[]].w == rec[index[]].w
  39. && rec[index[]].h == rec[index[]].h + rec[index[]].h)
  40. ans = true;
  41.  
  42. return ans;
  43. }
  44.  
  45. int main()
  46. {
  47. scanf("%d", &n);
  48. while(n--){
  49. for(int i=; i<; i++){
  50. scanf("%d%d", &rec[i].w, &rec[i].h);
  51. index[i] = i;
  52. }
  53. int flag = ;
  54. do{
  55. for(int i=; i<; i++){
  56. reverse(i);
  57. if(judge()){
  58. flag = ;
  59. break;
  60. }
  61. reverse(i);
  62. }
  63. if(flag) break;
  64. }while(next_permutation(index, index+));
  65. printf("%s\n", flag ? "Yes" : "No");
  66. }
  67. return ;
  68. }

【hihocoder1255 Mysterious Antiques in Sackler Museum】构造 枚举的更多相关文章

  1. Mysterious Antiques in Sackler Museum(判断长方形)

    题目链接 参考博客Ritchie丶的博客 - UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形) 题意:大概意思就是判断四个矩形能不能 ...

  2. UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)

    Sackler Museum of Art and Archaeology at Peking University is located on a beautiful site near the W ...

  3. UVaLive 7267 Mysterious Antiques in Sackler Museum (if-else,枚举)

    题意:给定四个矩形,要求从中选出三个,能不能拼成一个矩形. 析:说到这个题,我还坑了队友一次,读题读错了,我直接看的样例,以为是四个能不能组成,然后我们三个就拼命想有什么简便方法,后来没办法了,直接暴 ...

  4. hiho1255 Mysterious Antiques in Sackler Museum

    题目链接:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf 题目大意:给你四个矩形,判断是否能取其中任意三个组成一个大矩 ...

  5. 2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维

    题意是,选出三个,看看是否可以凑成一个新的矩形. #include<bits/stdc++.h> using namespace std; struct node { ]; }a[]; b ...

  6. 洛谷P1268 树的重量 【构造 + 枚举】

    题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离 ...

  7. 二十五、JDK1.5新特性---枚举

    与上篇文章介绍的相同,本文也是介绍jdk 1.5出现的新特性,本文将介绍枚举的相关用法. 在jdk 1.5 之前.Java可以有两种方式定义新类型:类和接口.对于大部分面向对象来说.这两种方法看起来似 ...

  8. Java 枚举类

    如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...

  9. NEFU 506&&ZOJ 3353 Chess Board (四种构造的高斯消元)

    题目链接 题意:有四种翻转方式,问是否能使得所有棋子都变为0,求最小步数. 题解:依次构造枚举求出最小值即可. #include <iostream> #include <cstdi ...

随机推荐

  1. 学DSP(二):目标芯片28335,GO!

    28335开发板有了,之前没有用过TI的片子,还是先看看这个东西是啥东西. 进入28335的中文网页: http://www.ti.com.cn/product/cn/tms320f28335    ...

  2. ssl相关

    http://www.willrey.com/support/ssl_DES.html http://www.07net01.com/linux/Linuxdejiamirenzhenggongnen ...

  3. sort,uniq命令

    文本排序:sort  默认以ASCII表排序    -n:数值排序    -r: 降序    -t: 字段分隔符    -k: 以哪个字段为关键字进行排序    -u: 排序后相同的行只显示一次   ...

  4. Zookeeper 1、Zookeeper 定义与工作原理

    1.什么是Zookeeper » Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务 » 它包含一个简单的原语集,分布式应用程序可以基于它实现同步 ...

  5. C#向文件写、读数据

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. MVC学习 (二) Razor语法

    MVC的Model层我理解与三层架构的Molde没有区别,都是作为各个层之间的数据沟通桥梁.但是关于Control和View都有一些与传统webform不同的特性. 这里先学习View里所用到的Raz ...

  7. JavaScript 【正则表达式验证数字代码】

    可以看到 Ajax 请求多了个 x-requested-with ,可以利用它,request.getHeader("x-requested-with"); 为 null,则为传统 ...

  8. Tomcat地址栏传中文参数乱码问题处理

    javascript中有时需要向后台传递中文参数,再次展示到前台时显示为乱码,解决方案: 方案1:修改Tomcat-conf-server.xml文件 大约69-71行  修改为: <Conne ...

  9. Integer to Roman(JAVA)

    public String intToRoman(int num) { int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[ ...

  10. exist和not exist用法

    参考:http://wenku.baidu.com/view/577f4d49cf84b9d528ea7a6f.html    //这个讲的很详细 引用自:http://chenling1018.bl ...