题目:传送门

题意:构造出一个矩阵,使得矩阵含有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 (构造)的更多相关文章

  1. UVaLive 7269 Snake Carpet (找规律,模拟)

    题意:给定一个数字n,表示有n条蛇,然后蛇的长度是 i ,如果 i 是奇数,那么它只能拐奇数个弯,如果是偶数只能拐偶数个,1, 2除外,然后把这 n 条蛇, 放到一个w*h的矩阵里,要求正好放满,让你 ...

  2. UVALive - 7269 I - Snake Carpet

    思路: 多画画就发现从五的时候可以这么填: 六的时候这么填: 七的时候这么填: 看出规律了吗? 没看出的话再画画把. #include <bits/stdc++.h> using name ...

  3. 构造 hihocoder 1257 Snake Carpet (15北京I)

    题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...

  4. 【hihocoder 1257 Snake Carpet】构造

    2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...

  5. UVALive 6088 Approximate Sorting 构造题

    题目链接:点击打开链接 题意: 给定一个n*n的01矩阵 我们跑一下例子== 4 0111 0000 0100 0110 0123 \|____ 0|0111 1|0000 2|0100 3|0110 ...

  6. hihoCoder 1257 Snake Carpet(很简单的构造方法)

    2015 ACM / ICPC 北京现场赛 I 题 构造 注意一个小坑,每条蛇的输出是要从头到尾输出的. 还要注意的是,不能开数组去模拟构造过程,然后输出,那样会TLE的. #include < ...

  7. hiho1257 Snake Carpet

    题目链接:http://hihocoder.com/problemset/problem/1257 题目大意:有n条蛇 编号为1-n 每条蛇的长度跟编号相等 奇数编号的蛇必须拐奇数次(除了第一条)偶数 ...

  8. UVaLive 4868 Palindrometer (暴力 / 构造)

    题意: 给定一个固定长度的字符串, 字符串是一个含有前导0的数字, 问这个数字加上多少能构成一个回文字符串. 分析: 其实这题有很多种方法, 方法12是我做完后看别人代码总结的, 方法3是我当时想的一 ...

  9. UVaLive 7637 Balanced String (构造)

    题意:给定一个括号的序列,原先的序列是碰到左括号加1,碰到右括号减1,然后把序列打乱,让你找出字典序最小的一个答案. 析:直接从第一个括号判断就好了,优先判断左括号,如果不行就加右括号. 代码如下: ...

随机推荐

  1. BZOJ-1927 星际竞速 最小费用最大流+拆点+不坑建图

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1593 Solved: 967 [Submit][Statu ...

  2. CODEVS 1959 拔河比赛(另一版本)

    题目描述 Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近. 输入描述 ...

  3. Linux下J2EE环境搭建

    1.下载MyEclipse 2010的linux安装包. myeclipse-10.1-offline-installer-linux 2.将下载MyEclipse 2010的linux安装包,使用X ...

  4. Laravel 5.3 中文文档翻译完成

    经过一个多月的紧张翻译和校对,翻译完成.以下是参与人员: Laravel 5.3 中文文档翻译完成 稿源:七星互联www . qixoo.com 文档地址在此:https://laravel-chin ...

  5. HD1847 Good Luck in CET-4 Everybody!(巴什博弈)

    巴什博弈: 一堆物品n个,最多取m个,最少取1个,最后取走的人获胜 分析:只要保证取玩最后剩m+1个,则必定胜利,所以构造m+1,只要n是 m+1的倍数,则先手必败,每次先手取玩,后手可取使得剩下的仍 ...

  6. Python socket编程之五:更新分时图

    f1.py # -*- coding: utf-8 -*- import socket import struct import sqlalchemy import pandas ########## ...

  7. Linux 磁盘分区

    原文地址:http://www.jb51.net/LINUXjishu/57192.html 磁头数(Heads)表示硬盘总共有几个磁头,也就是有几面盘片, 最大为 255 (用 8 个二进制位存储) ...

  8. Apache22中配置虚拟主机(Apache VirtualHost)

    Apache VirtualHost的作用就是可以让一个apache为多个域名服务,相当于一个服务器挂了N多个网站,举个例子: 我的apache服务器,ip为x.x.x.x,我有两个域名www.too ...

  9. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  10. C++中 :: 的意思

    表示作用域,和所属关系 ::是运算符中等级最高的,它分为三种:1)global scope(全局作用域符),用法(::name)2)class scope(类作用域符),用法(class::name) ...