hihoCoder 1257 Snake Carpet(很简单的构造方法)
2015 ACM / ICPC 北京现场赛 I 题
构造
注意一个小坑,每条蛇的输出是要从头到尾输出的。
还要注意的是,不能开数组去模拟构造过程,然后输出,那样会TLE的。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std; const int maxn=+;
vector<int> G[maxn];
int Find[maxn][];
int n;
int R1,C1,R2,C2;
int tot; int ans[maxn][maxn]; void f()
{
Find[][]=; Find[][]=; Find[][]=;
for(int i=;i<=;i=i+)
{
if(i%==) Find[i][]=Find[i-][]+;
else Find[i][]=Find[i-][];
} for(int i=;i<=;i=i+)
{
if(i%==) Find[i][]=Find[i-][]+;
else Find[i][]=Find[i-][];
}
} void init()
{
//清空
for(int i=;i<=n;i++) G[i].clear();
tot=; //确定左图的大小
R1=C1=(n+)/; //确定右图的大小
if(n%==){
R2=Find[n-][];
C2=Find[n-][];
}
else {
R2=Find[n][];
C2=Find[n][];
}
} void odd()
{
for(int i=;i<=n;i=i+)
{
tot++;
for(int j=;j<=tot;j++)
{
G[i].push_back(tot);
G[i].push_back(j); ans[tot][j]=i;
}
for(int j=tot-;j>=;j--)
{
G[i].push_back(j);
G[i].push_back(tot); ans[j][tot]=i;
}
}
} void even()
{
if(R1==R2)
{
int NowR=;
int NowC=; for(int i=;i<=n;i=i+)
{ //横着画
if(i%==)
{
for(int j=;j<=i/;j++)
{
G[i].push_back(NowR+);
G[i].push_back(j+C1); ans[NowR+][j+C1]=i;
} for(int j=i/;j>=;j--)
{
G[i].push_back(NowR+);
G[i].push_back(j+C1); ans[NowR+][j+C1]=i;
}
NowR=NowR+;
} //竖着画
else
{
for(int j=;j<=i/;j++)
{
G[i].push_back(j);
G[i].push_back(NowC++C1); ans[j][NowC++C1]=i;
} for(int j=i/;j>=;j--)
{
G[i].push_back(j);
G[i].push_back(NowC++C1); ans[j][NowC++C1]=i;
}
NowC=NowC+;
}
}
}
else if(R1==C2)
{
swap(R2,C2); int NowR=R2+;
int NowC=; for(int i=;i<=n;i=i+)
{
//竖着画 if(i%==)
{
for(int j=R2;j>=R2-i/+;j--)
{
G[i].push_back(j);
G[i].push_back(NowC++C1); ans[j][NowC++C1]=i;
} for(int j=R2-i/+;j<=R2;j++)
{
G[i].push_back(j);
G[i].push_back(NowC++C1); ans[j][NowC++C1]=i;
}
NowC=NowC+;
} //横着画
else
{
for(int j=;j<=i/;j++)
{
G[i].push_back(NowR-);
G[i].push_back(j+C1); ans[NowR-][j+C1]=i;
} for(int j=i/;j>=;j--)
{
G[i].push_back(NowR-);
G[i].push_back(j+C1); ans[NowR-][j+C1]=i;
}
NowR=NowR-;
}
}
}
} void print()
{
for(int i=;i<=n;i++)
{
for(int j=;j<G[i].size();j++)
{
printf("%d",G[i][j]);
if(j<G[i].size()-) printf(" ");
else printf("\n");
}
}
} int main()
{
f();
while(~scanf("%d",&n))
{
init();//初始化
odd();//左图
even();//右图
/*
for(int i=1;i<=R1;i++)
{
for(int j=1;j<=C1+C2;j++)
{
printf("%5d",ans[i][j]);
}
printf("\n");
}
*/
printf("%d %d\n",R1,C1+C2);
print();//输出
}
return ;
}
hihoCoder 1257 Snake Carpet(很简单的构造方法)的更多相关文章
- 【hihocoder 1257 Snake Carpet】构造
2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...
- 构造 hihocoder 1257 Snake Carpet (15北京I)
题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...
- JavaSE学习总结(五)——封装,继承,多态很简单
java面向对象的三大特性是:封装.继承与多态,是面向对象编程的核心. 一.封装 简单说封装就是将同一类事物的特性与功能包装在一起,对外暴露调用的接口. 封装:封装也称信息隐藏,是指利用抽象数据类型把 ...
- [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office
打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...
- MVC其实很简单(Django框架)
Django框架MVC其实很简单 让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同. 下面就是通过使用Django来完成以上功能的例子: 首先,我们 ...
- 【结果很简单,过程很艰辛】记阿里云Ons消息队列服务.NET接口填坑过程
Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的 ...
- 自定义View其实很简单系列1-12
作者: AigeStudio http://blog.csdn.net/aigestudio 说明:文中的1/12表示12篇中的第1篇, 1/6=2/12表示12篇中的第2篇,其它类似. 自定义控件 ...
- 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)
1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...
- java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊
java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...
随机推荐
- JavaScript高级程序设计:第二十一章
第二十一章 Ajax与Comet 一.XMLHttpRequest对象 1.XHT的用法 在使用XHR对象时,要调用的第一个方法时open( ),它接受3个参数:要发送的请求的类型.请求的URL和表示 ...
- HDU 2544 最短路(dijkstra+邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; const int INF=10e7; ...
- IoC容器Autofac正篇之类型注册(五)
Autofac类型注册 类型注册简单的从字面去理解就可以了,不必复杂化,只是注册的手段比较丰富. (一)类型/泛型注册 builder.RegisterType<Class1>(); 这种 ...
- ios 修改程序显示名称
当你创建一个project时,会要求你输入product name & company identifier,这两个property的值should和你在apple developer mem ...
- Entity Framework 学习高级篇1—改善EF代码的方法(上)
本节,我们将介绍一些改善EF代码的相关方法,如NoTracking,GetObjectByKey, Include等. l MergeOption.NoTracking 当我们只需要读 ...
- 最大边和最小边之差最小的生成树 UVA 1394
题目大意:给你n个点的图,求苗条度(最大边减最小编)尽量小的生成树 思路:sort以后暴力枚举区间即可 //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #inclu ...
- Django Template模板
Django Template 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. 下面我们来调用html views def ind ...
- ibatis resultMap 结果集映射
1.结果集映射 就是将返回的记录,逐个字段映射到java对象上:如果数据库字段与java对象的成员变量名对应的话,则使用resultClas即可 2.实现 结合 ibatis初探这篇文章中提到的pro ...
- Bill Total Value
Bill Total Value time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Jquery的parent和parents(找到某一特定的祖先元素)
关于Jquery的parent和parents parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合.parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以 ...