codeforces 432E Square Tiling

题意

题解

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(x) (int)x.size()
#define de(x) cout<< #x<<" = "<<x<<endl
#define dd(x) cout<< #x<<" = "<<x<<" "
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi; const int N = 111; int n, m;
bool in[N][N];
int ans[N][N], ban[N][N]; int calc(int x) {
for(int i = 0; ; ++i) if(!(x>>i&1)) return i;
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin >> n >> m;
rep(i, 1, n+1) rep(j, 1, m+1) in[i][j] = 1;
memset(ans, -1, sizeof(ans));
rep(i, 1, n+1) rep(j, 1, m+1) if(ans[i][j]==-1) {
int c = calc(ban[i][j]), k;
rep(t, 1, n+1) {
bool ok = 1;
if(i+t-1>n||j+t-1>m) ok = 0;
rep(x, i, i+t) if(ans[x][j+t-1]!=-1 || calc(ban[x][j+t-1])>c) ok = 0;
rep(y, j, j+t) if(ans[y][i+t-1]!=-1 || calc(ban[y][i+t-1])>c) ok = 0;
if(!ok) break;
k = t;
if(j+t<=m&&c>calc(ban[i][j+t])) break;
}
rep(x, i, i+k) rep(y, j, j+k) ans[x][y] = c;
rep(x, i, i+k) ban[x][j-1] |= (1<<c), ban[x][j+k] |= (1<<c);
rep(y, j, j+k) ban[i-1][y] |= (1<<c), ban[i+k][y] |= (1<<c);
}
rep(i, 1, n+1) {
rep(j, 1, m+1) cout << (char)(ans[i][j]+'A');
cout << endl;
}
return 0;
}

codeforces 432E Square Tiling的更多相关文章

  1. Codeforces 432E Square Tiling(结构体+贪婪)

    题目连接:Codeforces 432E Square Tiling 题目大意:给出一个n∗m的矩阵,要求对该矩阵进行上色,用大写字母,可是每次上色的区域必须是正方形,不求相邻的上色区域不能有同样的颜 ...

  2. Codeforces 417E Square Table(随机算法)

    题目链接:Codeforces 417E Square Table 题目大意:给出n和m.要求给出一个矩阵,要求每一列每一行的元素的平方总和是一个平方数. 解题思路:构造.依照 a a a b a a ...

  3. Codeforces 612E - Square Root of Permutation

    E. Square Root of Permutation A permutation of length n is an array containing each integer from 1 t ...

  4. Codeforces 895C - Square Subsets

    895C - Square Subsets 思路:状压dp. 每个数最大到70,1到70有19个质数,给这19个质数标号,与状态中的每一位对应. 状压:一个数含有这个质因子奇数个,那么他状态的这一位是 ...

  5. Codeforces 895C Square Subsets:状压dp【组合数结论】

    题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...

  6. Codeforces 895C Square Subsets(状压DP 或 异或线性基)

    题目链接  Square Subsets 这是白书原题啊 先考虑状压DP的做法 $2$到$70$总共$19$个质数,所以考虑状态压缩. 因为数据范围是$70$,那么我们统计出$2$到$70$的每个数的 ...

  7. Codeforces 895C - Square Subsets 状压DP

    题意: 给了n个数,要求有几个子集使子集中元素的和为一个数的平方. 题解: 因为每个数都可以分解为质数的乘积,所有的数都小于70,所以在小于70的数中一共只有19个质数.可以使用状压DP,每一位上0表 ...

  8. Codeforces.612E.Square Root of Permutation(构造)

    题目链接 \(Description\) 给定一个\(n\)的排列\(p_i\),求一个排列\(q_i\),使得对于任意\(1\leq i\leq n\),\(q_{q_i}=p_i\).无解输出\( ...

  9. 状压DP小拼盘

    有的DP题,某一部分的状态只有两种,选或不选. 开数组记录,代价太大,转移不方便. 状态压缩意为,用 “0/1“ 表示 “选/不选“ . 把状态表示为二进制整数. There are 10 kinds ...

随机推荐

  1. linux使用mail命令发送邮件

    在工作中使用linux,偶尔也会需要使用mail命令来进行发邮件.    从上面的命令看,系统已经安装了mail,对些我们还需要设置一下mail,让它使用外面的邮箱进行发邮件.设置文件是 /etc/m ...

  2. 未能加载“xxx”程序集

    找到程序集名称,去项目文件中查找是否拥有.

  3. xmpp实现的即时通讯聊天(一)

    参考网址:http://www.jianshu.com/p/b401ad6ba1a7 http://www.jianshu.com/p/4edbae55a07f 一.mysql和openfire环境的 ...

  4. Linux学习8-Linux常用命令(4)

    链接命令     命令名称:ln 命令英文原意:link 命令所在路径:/bin/ln 执行权限:所有用户 功能描述:生成链接文件 语法:ln 选项[-s][原文件] [目标文件] 选项: -s 创建 ...

  5. Spring 中面向AOP之一系列做法

    Spring的AOP实现是通过集成AspectJ框架实现的. 想必这句话大家都知道了吧,不知道也没关系,最起码你现在知道了. 四种实现方案,接下来我们一一去揭开它的神秘的面纱....... 第一种(伪 ...

  6. Jquery全选系列操作(锋利的jQuery)

    Jquery全选系列操作(锋利的jQuery) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  7. SQL事务在存储过程的应用

    -- ============================================= -- Author: jf_ou -- Create date: 2017-08-22 -- Desc ...

  8. 超级简单的jquery轮播图demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. textarea 元素的 placeholder 属性不显示

    <textarea> 标签定义多行的文本输入控件. placeholder:描述文本区域预期值的简短提示. textarea 的 placeholder 属性值不显示的原因可能是 < ...

  10. JavaSE (二)

    this关键字 当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this. 用法:对当前对象的默认引用 调用自己的的构造方法. 用在构造方法内部,区 ...