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(很简单的构造方法)的更多相关文章

  1. 【hihocoder 1257 Snake Carpet】构造

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

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

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

  3. JavaSE学习总结(五)——封装,继承,多态很简单

    java面向对象的三大特性是:封装.继承与多态,是面向对象编程的核心. 一.封装 简单说封装就是将同一类事物的特性与功能包装在一起,对外暴露调用的接口. 封装:封装也称信息隐藏,是指利用抽象数据类型把 ...

  4. [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office

    打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...

  5. MVC其实很简单(Django框架)

    Django框架MVC其实很简单 让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同. 下面就是通过使用Django来完成以上功能的例子: 首先,我们 ...

  6. 【结果很简单,过程很艰辛】记阿里云Ons消息队列服务.NET接口填坑过程

    Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的 ...

  7. 自定义View其实很简单系列1-12

    作者: AigeStudio  http://blog.csdn.net/aigestudio 说明:文中的1/12表示12篇中的第1篇, 1/6=2/12表示12篇中的第2篇,其它类似. 自定义控件 ...

  8. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  9. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

随机推荐

  1. CSS3秘笈:第十章

    CSS的transform.transition和animation属性 1.transform(倾斜):利用transform属性可以使导航栏稍微倾斜,或者使图片在访问者的鼠标经过它时放大两倍,甚至 ...

  2. Java C# .net 和 C C++ 跨平台的区别

    当前主流的手机平台很多,而各个主流的平台的语言支持大同小异:如 1.windows系统WP8上主要支持 VB, C#, c/c++, 2.苹果系统ios上支持 object-c, c/c++ 3.an ...

  3. spark第二篇--基本原理

    ==是什么 == 目标Scope(解决什么问题) 在大规模的特定数据集上的迭代运算或重复查询检索 官方定义 aMapReduce-like cluster computing framework de ...

  4. ios控件 UIImageView

    UIImageView的作用是显示图片和多张动态的图片   - (id)initWithImage:(UIImage *)image;//初始化图片视图 - (id)initWithImage:(UI ...

  5. HTML与DOM BOM javascript

    1.什么是DOM? 简单说就是DOM规定了HTML,XML等的一些文档映射规范,使JavaScript可以根据这些规范来进行获取元素,在元素上进行各种操作,使得用户页面可以动态的变化,从而大大使页面的 ...

  6. CSS概要

    CSS概要 laiqun@msn.cn Contents 1. css的引入 2. css的选择器及效果图 3. css 盒模型 4. css 浮动 4.1. 浮动的作用: 4.2. 浮动的影响: 5 ...

  7. 给postgresql 创建新的用户

    \du 查看当前postgresql的用户,一般此时只能看到 postgres create user ysr superuser password '123456'; \du 就可以看到两个用户了. ...

  8. 12c meet sysdba meet ORA-01017: invalid username/password; logon denied

    checklist: 1.12c: threaded_execution=true Prevents OS Login As Sysdba 2. The following database para ...

  9. HTML+CSS Day05 基本CSS选择器、复合CSS选择器与CSS继承性

    1.基本CSS选择器 (1)标记选择器 <style>                       h1{ color:red; font-size:25px;}           &l ...

  10. libMobileGestalt与UDID

    libMobileGestalt与UDID 没有评论 在iOS中,libMobileGestalt动态库, 用来取得各种系统变量,比如UDID, 磁盘使用量, 设备版本 在iOS7中,对于开发者来说, ...