【模拟】Codeforces 710C Magic Odd Square
题目链接:
http://codeforces.com/problemset/problem/710/C
题目大意:
构造一个N*N的幻方。任意可行解。
幻方就是每一行,每一列,两条对角线的和都相等。
题目思路:
【模拟】
分为奇幻方、单偶幻方和双偶幻方三种构造。
具体分类可以查看百度。幻方的N种构造方法
//
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 54
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
int a[N][N];
void work1(int xx,int yy,int nn,int s,int t)
{
int i,x,y;
x=xx+;y=yy+nn/;
a[x][y]=s;
for(i=s+;i<=t;i++)
{
x=(x-+nn)%nn+xx;
y=(y+)%nn+yy;
if(a[x][y])x=(x+)%nn+xx,y=(y-+nn)%nn+yy;
a[x][y]=i;
}
}
void work2()
{
int i,j,k;
m=n/;k=m/;
work1(,,m,,sqr(m));
work1(m,m,m,sqr(m)+,sqr(m)*);
work1(,m,m,sqr(m)*+,sqr(m)*);
work1(m,,m,sqr(m)*+,sqr(m)*);
for(i=,j=m+m/;i<m;i++)
swap(a[i][j],a[i+m][j]);
for(i=;i<m;i++)
{
if(i==k)continue;
for(j=;j<k;j++)
swap(a[i][j],a[i+m][j]);
}
for(i=;i<k;i++)
swap(a[k][i+k],a[k+m][i+k]);
}
void work3()
{
int i,j,k;
m=n*n+;
for(i=;i<n;i++)
for(j=;j<n;j++)
a[i][j]=i*n+j+;
for(i=;i<n;i+=)
{
for(j=;j<n;j+=)
{
for(k=;k<;k++)
{
a[i+k][j+k]=m-a[i+k][j+k];
a[i+k][j+-k]=m-a[i+k][j+-k];
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
// for(scanf("%d",&cas);cas;cas--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s+1))
while(~scanf("%d",&n))
{
if(n&)
work1(,,n,,sqr(n));
else if(n%==)
work3();
else
work2();
for(i=;i<n;i++)
{
for(j=;j<n;j++)
printf("%d ",a[i][j]);
puts("");
}
}
return ;
}
/*
// //
*/
【模拟】Codeforces 710C Magic Odd Square的更多相关文章
- Codeforces 710C. Magic Odd Square n阶幻方
C. Magic Odd Square time limit per test:1 second memory limit per test:256 megabytes input:standard ...
- CodeForces - 710C Magic Odd Square(奇数和幻方构造)
Magic Odd Square Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, c ...
- codeforces 710C Magic Odd Square(构造或者n阶幻方)
Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both ma ...
- CodeForces 710C Magic Odd Square (n阶奇幻方)
题意:给它定一个n,让你输出一个n*n的矩阵,使得整个矩阵,每行,每列,对角线和都是奇数. 析:这个题可以用n阶奇幻方来解决,当然也可以不用,如果不懂,请看:http://www.cnblogs.co ...
- CodeForces 710C Magic Odd Square
构造. 先只考虑用$0$和$1$构造矩阵. $n=1$,$\left[ 1 \right]$. $n=3$,(在$n=1$的基础上,最外一圈依次标上$0$,$1$,$0$,$1$......) $\l ...
- codeforces 710C C. Magic Odd Square(构造)
题目链接: C. Magic Odd Square Find an n × n matrix with different numbers from 1 to n2, so the sum in ea ...
- [Educational Codeforces Round 16]C. Magic Odd Square
[Educational Codeforces Round 16]C. Magic Odd Square 试题描述 Find an n × n matrix with different number ...
- Magic Odd Square (思维+构造)
Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both ma ...
- 689D Magic Odd Square 奇数幻方
1 奇数阶幻方构造法 (1) 将1放在第一行中间一列; (2) 从2开始直到n×n止各数依次按下列规则存放:按 45°方向行走,向右上,即每一个数存放的行比前一个数的行数减1,列数加1 (3) 如果行 ...
随机推荐
- HTML5+移动APP(1)
前言: 介绍使用html5+(nativejs)和mui开发移动app(包括Android和iOs) HBuilder h5+开发app的环境,是一个对eclipse做了深度定的IDE. 官网: ht ...
- java simple check whether a file or directory.
Ref: check whether a file or directory First, make sure the path exists by using: new File(path).ex ...
- DATEDIFF interval=ms的用法
datediff(ms,@CurrDateTime,@Date)>0 当上面的日期超过24天,用上面的sql会有问题 要修改成如下: (CONVERT(VARCHAR,@CurrDateTime ...
- (whh仅供自己参考)进行ip网络请求的步骤
这个过程大致是这个样子: 1 添加通知 2 发送网络请求 里边有一个发送通知的操作 3 执行发送通知的具体操作 代码如下: 1 在VC添加通知 [[NSNotificationCenter defau ...
- inno setup 多语言安装
之前的安装程序默认语言为英文,现在我们需要将它变成中文,由于InnoSetup安装包中默认没有带中文语言文件,我们需要下载一个先: 到http://www.400gb.com/u/758954/123 ...
- mysql如何将一个表导出为excel表格
方法一:进入到mysql的控制台,输入: 1. SELECT * INTO OUTFILE ‘./test.xls‘ FROM tb1 WHERE 1 ORDER BY id DESC LIMIT ...
- arm Linux 系统调用过程
系统调用是操作系统提供给用户(应用程序)的一组接口,每个系统调用都有一个对应的系统调用函数来完成相应的工作.用户通过这个接口向操作系统申请服务,如访问硬件,管理进程等等.但是因为用户程序运行在用户空间 ...
- 一句实现jquery导航栏
/*mine 才疏学浅,望大神绕行 */ .current{ color: red; font-size: large; } $(function(){ //实现点击标题的css和.lev1下面的a标 ...
- Linux系统分区
在Linux系统里面,"分区",被称作"挂载点" 挂载点 意思就是把一部分硬盘容量,分成一个文件夹的形式,用来做某些事情,这个文件夹的名字,就叫做:挂载点 (如 ...
- Cobar介绍及配置
from:http://code.alibabatech.com/wiki/display/cobar/Home Skip to end of metadata Page restrictions ...