zoj 3823 Excavator Contest 构造
Excavator Contest
Time Limit: 1 Sec
Memory Limit: 256 MB
题目连接
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3823
Description
Bluefly University is famous of excavator technology. Lots of students take part in many excavator-related courses. After the students finish their courses, they will compete in a contest called International Collegiate Excavator Contest (ICEC).
This year's ICEC will be held at Marjar University. This is an individual competition that each contestant will start the match one by one.
The task of the contest is to drive an excavator passing a square field. The judge partitioned the field into N × N equal-sized square chunks. Each chunk should be visited exactly one time. The contestant will drive the excavator, starting from and ending at the center of two different boundary chunks.
In order to show off their superb excavator operating skills, the contestants need to drive the excavator with as many as possible turnings. Since the excavator is a kind of large and heavy vehicle, it can only make a turn to left or right at the center of any chunk.
Bob is a student from Marjar University. He wants to win the contest. To fulfill this dream, he needs to drive the excavator with at least N× (N - 1) - 1 turnings. It seems to be a difficult task, so he turns to you for help. Please write a program to find a feasible route for him.
Input
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:
There is only one integer N (2 <= N <= 512).
Output
For each test case, output a matrix with N × N integers indicating the route to pass all the chunks. Bob will drive the excavator passing the chunks in the order of 1, 2, .., N2.
If there are multiple solutions, any one will be acceptable.
Sample Input
2
4
3
Sample Output
2 1 16 15
3 4 13 14
6 5 12 11
7 8 9 10
1 2 3
8 7 4
9 6 5
HINT
题意
给你一个n*n个格子,然后让你跑,使得起点和终点都必须在边界上
而且使得转弯次数至少是n*(n-1)-1次
题解:
分奇数偶数构造
大概偶数特别容易想
奇数比较麻烦,奇数在我的构造方式下,要转圈圈

反正就非常迷就是了……
@)1%KBO0HM418$J94$1R.jpg)
代码:
//qscqesze
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <bitset>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 100006
#define mod 1000000007
#define eps 1e-9
#define e exp(1.0)
#define PI acos(-1)
const double EP = 1E- ;
int Num;
//const int inf=0x7fffffff;
const ll inf=;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
//************************************************************************************* int A[][];
int B[][];
int main()
{
int t;scanf("%d",&t);
while(t--)
{
int n;scanf("%d",&n);
if(n%==)
{
int nowx= ,nowy = ;
int now = ;
while(now<=n*n)
{
A[nowy][nowx]=now;
if(nowy<=n-)
{
if(nowx%==)
{
if(nowy%==)
nowx=nowx+;
else
nowy=nowy+;
}
else if(nowx%==)
{
if(nowy%==)
nowy=nowy+;
else
nowx=nowx-;
}
else if(nowx%==)
{
if(nowy%==)
nowx=nowx+;
else
nowy=nowy-;
}
else
{
if(nowy==)
nowx=nowx+;
else if(nowy%==)
nowy=nowy-;
else
nowx=nowx-;
}
}
else
{
if(nowx%==)
{
if(nowy==n-)
nowy=nowy+;
else
nowx=nowx+;
}
else if(nowx%==)
{
if(nowy==n-)
nowx=nowx+;
else
nowy=nowy-;
}
else if(nowx%==)
{
if(nowy==n-)
nowy=nowy+;
else
nowx=nowx+;
}
else
{
nowy=nowy-;
}
}
now++;
}
}
else
{
A[][]=;
int nowx = ;
int nowy = ;
int now = ;
for(int i=;i<=n;i+=)
{
for(int ii=;ii<=i-;ii++)
{
for(int jj=;jj<=i-;jj++)
{
B[ii][jj]=A[ii][jj];
}
} for(int ii=;ii<=i-;ii++)
{
for(int jj=;jj<=i-;jj++)
{
A[ii][jj]=(i-)*(i-)+-B[i--jj][ii];
}
}
nowx = ,nowy = i-;
while(now<=i*i)
{
A[nowx][nowy]=now;
if(nowx<=i-)
{
if(nowx%==)
{
if(nowy==i-)
nowy=nowy+;
else
nowx=nowx+;
}
else
{
if(nowy==i)
nowy=nowy-;
else
nowx=nowx+;
}
}
else
{
if(nowx==i-)
{
if(nowy%==)
nowy=nowy-;
else
nowx=nowx+;
}
else
{
if(nowy%==)
nowx=nowx-;
else
nowy=nowy-;
}
}
now++;
} }
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
printf("%d ",A[i][j]);
}
printf("\n");
}
}
}
zoj 3823 Excavator Contest 构造的更多相关文章
- zoj 3823 Excavator Contest(结构体)
题目链接:zoj 3823 Excavator Contest 题目大意:一个人开着挖掘机要在N*N的格子上面移动.要求走全然部的格子.而且转完次数要至少为n*(n-1) - 1次, 而且终点和起点必 ...
- ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4061 题意:定义一个长度为 n 的序列 a1,a2,..,an ...
- 【ZOJ 3502】Contest
题 题意 n个问题,解决的顺序影响正确的概率,无论之前解决的问题是否答对,当前问题 j 答对概率为max{a[i][j]} (i为解决过的问题).求答对题目的最大期望和对应的答题顺序.T组测试,T ( ...
- zoj 3212 K-Nice(构造)
K-Nice Time Limit: 1 Second Memory Limit: 32768 KB Special Judge This is a super simple pr ...
- ZOJ 2334 Monkey King
并查集+左偏树.....合并的时候用左偏树,合并结束后吧父结点全部定成树的根节点,保证任意两个猴子都可以通过Find找到最厉害的猴子 Monkey King ...
- The 2014 ACM-ICPC Asia Mudanjiang Regional Contest
The 2014 ACM-ICPC Asia Mudanjiang Regional Contest A.Average Score B.Building Fire Stations C.Card G ...
- 2014ACM/ICPC亚洲区牡丹江站 浙大命题
A Average Score http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 a班有n个人,b班有m个人,bob在a ...
- 2014 牡丹江区域赛 B D I
http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=358 The 2014 ACM-ICPC Asia Mudanj ...
- ZOJ 3212 K-Nice(满足某个要求的矩阵构造)
H - K-Nice Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Sta ...
随机推荐
- Eclipse中将classes文件删除之后显示:找不到或无法加载主类解决方案
第一步: 将Eclipse自动编译打开 Project -> Build Automatically 第二步: Eclipse - Project - Clean
- HTML5学习(九)----应用程序缓存
参考教程:http://www.w3school.com.cn/html5/html_5_app_cache.asp 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 w ...
- vim 退出保留显示的内容
/*************************************************************************** * vim 退出保留显示的内容 * 声明: * ...
- data guard折腾记一
终于有空闲的机器腾出来了,生产环境上的一套Oracle环境终于可以鸟枪换炮了,生产环境有Data Guard,为了减少停机时间,而且避免重新构建Data Guard的麻烦(其实也不麻烦,就是浪费时间) ...
- 应用MVP模式写出可维护的优美Android应用
在Android开发中,我们常常会动辄写出数千行的Java类,而当一个Activity有4.5千行的时候,想找一个逻辑在哪儿就会显得异常痛苦了.比如想在数据加载错误的时候,显示一个提示信息,上上下下得 ...
- (Java)利用ListIterator(iterator 重复器/迭代器的子接口) 操作ArrayList
add()方法是在下一个将要取得的元素之前插入新的元素.因此如果在下一个将要取得的元素的序号为0,则在序号0的元素前插入新的元素. 测试: 见第1.行,在序号为0的元素前添加一个元素. 见第2.行:这 ...
- codeforces 676D Theseus and labyrinth BFS搜索
分析:一个n*m的矩阵,每个格子有12个状态,每次按一次,每个格子转90度,所以整个矩阵只有4种状态,然后爆搜就好了 #include <cstdio> #include <iost ...
- javascript 的 split用法
var array = "200,400,300".split(","); var nums = [ ]; for (var i=0 ; i< array ...
- Express细节探究(1)——app.use(express.static)
express相信是很多人用nodejs搭建服务器的首选框架,相关教程有很多,也教会了大家来如何使用.如果你想更深的了解他的细节,不妨和我一起来研究一下. 先来看一个每个人都用到的方法app.use( ...
- 【noip2012】疫情控制
题意: 给出一颗n个节点有边权的树 和m个军队所在的位置 军队从某节点移动到相邻节点要花费边长度的时间 求最少要多少时间使得根节点(编号为1)到每个叶子的路径上最少有一支军队(根节点不能有军队) 题解 ...