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. leetcode383

    已知两个字符串,然后比较一个字符串是否来自另一个字符串,没有顺序要求. 简单题,用一个数组保存前一个字符串的每一个字符出现的次数,然后循环后一个字符串去检查,如果次数不够了,那么就返回false pu ...

  2. Shiro 的FilterChain

    /** * Shiro的FilterChain * @see ===================================================================== ...

  3. Python使用os.listdir()函数来获得目录中的内容

    摘自:http://it.100xuexi.com/view/otdetail/20130423/057606dc-7ad1-47e4-8ea6-0cf75f514837.html   1.在Pyth ...

  4. how to stop a thread

    it seems all stop methods of thread have been deprecated by java. so how to stop a thread then? it i ...

  5. js获取不同浏览器盒子宽度高度

    DTD 已声明 IE document.documentElement.scrollHeight 浏览器所有内容高 度 ,document.body.scrollHeight 浏览器所有内容高度 do ...

  6. SpringSecurity自定义过滤器

    applicationContext-security.xml: <beans:beans xmlns="http://www.springframework.org/schema/s ...

  7. PHP上传文件详解

    1.上传文件使用的提交方式和请求Content-type POST提交方式,原始的form表单提交请加上enctype="multipart/form-data" 2.MAX_FI ...

  8. Inno Setup入门(七)——提供安装语言选项

    Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本 ...

  9. 转 [分享一个SQL] 查会话阻塞关系,层次关系.

    with ash as (select /*+ materialize*/* from DBA_HIST_ACTIVE_SESS_HISTORY  where sample_time between ...

  10. HDU 2802 F(N) 数论+打表

    题目大意:f[n]-n^3=f[n-2]-(n-1)^3 (n >=3),f[1]=1,f[2]=7,求f[n]. 题目思路:将n^3移到到等式右边化简的到:f[n]=f[n-2]+3n*(n- ...