博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihoCoder 1257 Snake Carpet(很简单的构造方法)
阅读量:5856 次
发布时间:2019-06-19

本文共 2211 字,大约阅读时间需要 7 分钟。

2015 ACM / ICPC 北京现场赛 I 题

构造

注意一个小坑,每条蛇的输出是要从头到尾输出的。

还要注意的是,不能开数组去模拟构造过程,然后输出,那样会TLE的。

 

#include 
#include
#include
#include
#include
using namespace std;const int maxn=500+10;vector
G[maxn];int Find[maxn][3];int n;int R1,C1,R2,C2;int tot;int ans[maxn][maxn];void f(){ Find[2][1]=1; Find[2][2]=2; Find[4][2]=2; for(int i=4;i<=500;i=i+2) { if(i%4==0) Find[i][1]=Find[i-2][1]+2; else Find[i][1]=Find[i-2][1]; } for(int i=4;i<=500;i=i+2) { if(i%4==2) Find[i][2]=Find[i-2][2]+2; else Find[i][2]=Find[i-2][2]; }}void init(){ //清空 for(int i=0;i<=n;i++) G[i].clear(); tot=0; //确定左图的大小 R1=C1=(n+1)/2; //确定右图的大小 if(n%2==1){ R2=Find[n-1][1]; C2=Find[n-1][2]; } else { R2=Find[n][1]; C2=Find[n][2]; }}void odd(){ for(int i=1;i<=n;i=i+2) { tot++; for(int j=1;j<=tot;j++) { G[i].push_back(tot); G[i].push_back(j); ans[tot][j]=i; } for(int j=tot-1;j>=1;j--) { G[i].push_back(j); G[i].push_back(tot); ans[j][tot]=i; } }}void even(){ if(R1==R2) { int NowR=1; int NowC=0; for(int i=2;i<=n;i=i+2) { //横着画 if(i%4==0) { for(int j=1;j<=i/2;j++) { G[i].push_back(NowR+1); G[i].push_back(j+C1); ans[NowR+1][j+C1]=i; } for(int j=i/2;j>=1;j--) { G[i].push_back(NowR+2); G[i].push_back(j+C1); ans[NowR+2][j+C1]=i; } NowR=NowR+2; } //竖着画 else { for(int j=1;j<=i/2;j++) { G[i].push_back(j); G[i].push_back(NowC+1+C1); ans[j][NowC+1+C1]=i; } for(int j=i/2;j>=1;j--) { G[i].push_back(j); G[i].push_back(NowC+2+C1); ans[j][NowC+2+C1]=i; } NowC=NowC+2; } } } else if(R1==C2) { swap(R2,C2); int NowR=R2+1; int NowC=1; for(int i=2;i<=n;i=i+2) { //竖着画 if(i%4==0) { for(int j=R2;j>=R2-i/2+1;j--) { G[i].push_back(j); G[i].push_back(NowC+1+C1); ans[j][NowC+1+C1]=i; } for(int j=R2-i/2+1;j<=R2;j++) { G[i].push_back(j); G[i].push_back(NowC+2+C1); ans[j][NowC+2+C1]=i; } NowC=NowC+2; } //横着画 else { for(int j=1;j<=i/2;j++) { G[i].push_back(NowR-1); G[i].push_back(j+C1); ans[NowR-1][j+C1]=i; } for(int j=i/2;j>=1;j--) { G[i].push_back(NowR-2); G[i].push_back(j+C1); ans[NowR-2][j+C1]=i; } NowR=NowR-2; } } }}void print(){ for(int i=1;i<=n;i++) { for(int j=0;j

 

转载于:https://www.cnblogs.com/zufezzt/p/4977956.html

你可能感兴趣的文章
软件开发过程学习笔记(四)之详细设计说明书模板 分类: 开发过程 ...
查看>>
【转】TabError:inconsistent use of tabs and spaces
查看>>
步步为营 .NET 设计模式学习笔记系列总结
查看>>
WIN2008服务器不能复制粘贴怎么办
查看>>
链路层
查看>>
Thread和Runnable
查看>>
多系统盘挂载
查看>>
python预测新航线的票价_2020年中国大学MOOC的APP用Python玩转数据章节测验答案
查看>>
单片机原理及应用姜志海pdf_《单片机原理及应用(C语言版)》郭军利,祝朝坤,张凌燕【pdf】...
查看>>
mysql多实例管理脚本_mysql多实例停启脚本
查看>>
python interactive函数_Python 私有函数的实例详解
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
python 邮件解析_Python解析邮件
查看>>
python写windows小程序_在Windows环境下用Python写了一个小程序,出现下面的问题,希望大神能帮忙解答一下...
查看>>
sybase asa转mysql_SYBASE ASA数据库恢复方法
查看>>
java sdk mac 路径_Mac 上jdk默认存放路径以及环境变量配置
查看>>
java map 写法_Java中List与Map初始化的一些写法
查看>>
java垃圾回收 面试_Java垃圾回收相关面试题
查看>>
java ipmitool_ipmitool使用手册
查看>>
java如何让坦克动起来_04-通过子线程来让坦克动起来
查看>>