UVALive 7269 Snake Carpet (构造)
题目:传送门。
题意:构造出一个矩阵,使得矩阵含有n条蛇,每条蛇的长度是1到n,并且奇数长度的蛇有奇数个拐弯,偶数长度
的蛇有偶数个拐弯.
奇数和偶数分开构造,奇数可以是:
1357
3357
5557
7777
这样一直构造下去,偶数可以这样:
2266
4466
4466
8888
8888
不断的放右边和放下面.
然后预处理每一个蛇的每一个坐标,然后考虑一下偶数的是放在奇数部分的右边还是下面.
#include <bits/stdc++.h>
using namespace std;
#define maxn 1111 struct point {
int x, y;
};
vector <point> p[maxn];
int n; void init () {
for (int i = ; i <= ; i++) {
p[i].clear ();
}
for (int i = ; i <= ; i++) {
if (i&) {
int x = (i+)/;
int y = x;
for (int j = ; j <= x; j++) {
p[i].push_back ((point) {x, j});
}
for (int j = x-; j >= ; j--) {
p[i].push_back ((point) {j, y});
}
}
else {
if (i == ) {
p[].push_back ((point) {, });
p[].push_back ((point) {, });
}
else if ((i>>)&) {
int y = i>>;
for (int j = ; j <= y; j++) {
p[i].push_back ((point) {j, y});
}
for (int j = y; j >= ; j--) {
p[i].push_back ((point) {j, y+});
}
}
else {
int x = i>>;
for (int j = ; j <= x; j++) {
p[i].push_back ((point) {x, j});
}
for (int j = x; j >= ; j--) {
p[i].push_back ((point) {x+, j});
}
}
}
}
} int main () {
init ();
while (scanf ("%d", &n) == ) {
if (((n+)/)&) {//偶数放在右边
printf ("%d %d\n", (n+)>>, (n/)+(n/)+);
for (int i = ; i <= n; i++) {
for (int j = ; j < p[i].size (); j++) {
if (i&) {
printf ("%d %d%c", p[i][j].x, p[i][j].y, j == p[i].size()- ? '\n':' ');
}
else {
printf ("%d %d%c", p[i][j].x, p[i][j].y+((n+)>>), j == p[i].size()- ? '\n':' ');
}
}
}
}
else {//偶数放在下面
printf ("%d %d\n", (n/)+(n/)+, (n+)>>);
for (int i = ; i <= n; i++) {
for (int j = ; j < p[i].size (); j++) {
if (i&) {
printf ("%d %d%c", p[i][j].x, p[i][j].y, j == p[i].size()- ? '\n':' ');
}
else {
printf ("%d %d%c", p[i][j].x+((n+)>>), p[i][j].y, j == p[i].size()- ? '\n':' ');
}
}
}
}
}
return ;
}
UVALive 7269 Snake Carpet (构造)的更多相关文章
- UVaLive 7269 Snake Carpet (找规律,模拟)
题意:给定一个数字n,表示有n条蛇,然后蛇的长度是 i ,如果 i 是奇数,那么它只能拐奇数个弯,如果是偶数只能拐偶数个,1, 2除外,然后把这 n 条蛇, 放到一个w*h的矩阵里,要求正好放满,让你 ...
- UVALive - 7269 I - Snake Carpet
思路: 多画画就发现从五的时候可以这么填: 六的时候这么填: 七的时候这么填: 看出规律了吗? 没看出的话再画画把. #include <bits/stdc++.h> using name ...
- 构造 hihocoder 1257 Snake Carpet (15北京I)
题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...
- 【hihocoder 1257 Snake Carpet】构造
2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...
- UVALive 6088 Approximate Sorting 构造题
题目链接:点击打开链接 题意: 给定一个n*n的01矩阵 我们跑一下例子== 4 0111 0000 0100 0110 0123 \|____ 0|0111 1|0000 2|0100 3|0110 ...
- hihoCoder 1257 Snake Carpet(很简单的构造方法)
2015 ACM / ICPC 北京现场赛 I 题 构造 注意一个小坑,每条蛇的输出是要从头到尾输出的. 还要注意的是,不能开数组去模拟构造过程,然后输出,那样会TLE的. #include < ...
- hiho1257 Snake Carpet
题目链接:http://hihocoder.com/problemset/problem/1257 题目大意:有n条蛇 编号为1-n 每条蛇的长度跟编号相等 奇数编号的蛇必须拐奇数次(除了第一条)偶数 ...
- UVaLive 4868 Palindrometer (暴力 / 构造)
题意: 给定一个固定长度的字符串, 字符串是一个含有前导0的数字, 问这个数字加上多少能构成一个回文字符串. 分析: 其实这题有很多种方法, 方法12是我做完后看别人代码总结的, 方法3是我当时想的一 ...
- UVaLive 7637 Balanced String (构造)
题意:给定一个括号的序列,原先的序列是碰到左括号加1,碰到右括号减1,然后把序列打乱,让你找出字典序最小的一个答案. 析:直接从第一个括号判断就好了,优先判断左括号,如果不行就加右括号. 代码如下: ...
随机推荐
- 压力测试工具tsung
tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问.目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入研究过. 1.安装 tsung是用 ...
- AppStore占坑注意事项
AppStore占坑注意事项 我们会提前在AppStore(iTunesConnect)里注册一些应用名称,以满足未来业务需要和防止恶意注册,其中有一些需要注意的事情,整理如下: 倒计时180天 为了 ...
- iOS代码工具箱再续
if (CGRectContainsPoint(self.menuView.frame, point)) { point = [self.view convertPoint:point toView ...
- python urllib2使用心得
python urllib2使用心得 1.http GET请求 过程:获取返回结果,关闭连接,打印结果 f = urllib2.urlopen(req, timeout=10) the_page = ...
- Centos是什么
Linux是GNU/Linux的缩写,通常指各种Linux发行版的通称. 常见的Linux厂家主要有Redhat/Novell等. Redhat有两大Linux产品系列,其一是免费的Fedora Co ...
- redis哨兵配置主从
redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在redis的配置文件中添加鉴 ...
- Android Studio 设置不自动缩进匿名内部类
Android Studio 会默认缩进匿名内部类代码,这让人感觉有些不大适应,可以使用下面的方法进行取消. 取消选中橙色框前的几个复选框即可.
- OCJP-试题集合 | 对象的比较
Boolean b1 = new Boolean(true); Boolean b2 = new Boolean(true); 下面哪个能得到true的结果: A b1 == b2 B b1.equa ...
- Android自定义遮罩层设计
在做网页设计时,前端设计人员会经常用到基于JS开发的遮罩层,并且背景半透明.这样的效果怎么样在Android上实现呢?这个实现并不困难,先来上效果图: <ignore_js_op> 201 ...
- Linux下的网络管理工具—OpenNMS
导读 OpenNMS的是一个运营商级别的,高度集成的,开放源码的平台,用于构建网络监控解决方案.OpenNMS有两个发行版:Meridian and Horizon.使用Meridian是可取的,对企 ...