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 ...
随机推荐
- hdu_1253_胜利大逃亡(bfs+剪枝)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...
- 利用DataImportHandler建索引时一直无法完成
问题研究 项目中需要利用DataImportHandler从hive中sync数据到solr.发现有时候hive sql已经执行完几个小时了,sync任务还没有完成,貌似哪里卡住了.重启solr后重新 ...
- 使用Chrome DevTools的Timeline和Profiles提高Web应用程序的性能
来源: http://www.oschina.net/translate/performance-optimisation-with-timeline-profiles 我们都希望创建高性能的Web应 ...
- android--屏幕旋转方法总结
在介绍之前,我们需要先了解默认情况下android屏幕旋转的机制: 默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate ...
- Win7 “Bluetooth设置”对话框无法打开,及无法查找到设备
方法是在百度上找到的,试用成功. 1.打开开始菜单中的运行选项,然后在对话框中输入services.msc,回车打开服务界面: 2.然后在弹出来的服务窗口中查找到Bluetooth Support S ...
- PE文件格式详解(上)
作者:MSDN 译者:李马 摘要 Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式.PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Spec ...
- 做.net的早晚会用到,并且网上还没有这方面的正确资料或几乎很少
原文网址:http://www.cnblogs.com/langu/archive/2012/03/23/2413990.html 一直以来,找安装程序的msi源文件路径得到的都是“system32” ...
- perfect-scrollbar示例
<!DOCTYPE html> <html> <head> <title>perfect-scrollbar - www.97zzw.com -97站长 ...
- 用PHP实现验证码功能
目前,不少网站为了防止用户利用机器人自动注册.登录.灌水,都采用了 验证码技术.所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验 ...
- 基础-Servlet
Servlet是运行在web服务器上的一个java类. 它的作用是将http请求和http相应进行操作完成我们的业务逻辑. servlet创建: 1.创建一个类extends HttpServlet ...