51nod 1438:方阵与完全平方数
仅一行,为一个正整数n。(1 <= n <= 64)
输出n行,每行为n个整数,之间用空格隔开,表示所求的n*n方阵。或者,输出No Solution。
3
1 2 6
3 4 9
21 30 49
真真正正地被虐了一下午。。。其实本质上就是一个dfs,但是做起来是真的麻烦啊,各种错误百出的。
官方题解:
首先,n=1时无解。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#pragma warning(disable:4996)
using namespace std; int n,wang=0;
int square_flag[10000];
int val_flag[64005];
long long val[70][70]; int sear(int su)
{
long long i;
for (i = 2; ; i++)
{
if (i*i >= su && ((i<=9999&&square_flag[i]==0)||(i>9999)))
return i;
}
} void dfs(int x,int y,long long value)
{
if (wang==1)
{
return;
}
if (x == n&&y == n)
{
long long i, j, h, k, sum2 = 0, sum3 = 0;
for (i = 1; i <= n - 1; i++)
{
sum2 += val[i][y];
}
for (i = 1; i <= n - 1; i++)
{
sum3 += val[x][i];
}
for (i = 2;; i++)
{
if ((i <= 9999 && square_flag[i] == 1))continue;
double g = sqrt((double)(i*i - sum2 + sum3)); if (i*i - sum2 > 0 && g == (long long)g && ((g<=9999)&&(square_flag[(long long)g] == 0)||g>9999))
{
val[x][y] = i*i - sum2;
for (h = 1; h <= n; h++)
{
for (k = 1; k <= n; k++)
{
cout << val[h][k]<< " ";
}
cout << endl;
}
wang = 1;
return;
}
long long wa = sum3 - sum2;
if ((i + 1)*(i + 1) - (i*i) > wa)
{
long long op, sum_op = 0;
for (op = 1; op <= n; op++)
{
sum_op += val[op][y - 1];
}
square_flag[(long long)sqrt((double)sum_op)] = 0;
dfs(x,y-1,value+1);
return;
}
}
}
else if (x == n)
{
long long i, sum2 = 0;
for (i = 1; i <= n - 1; i++)
{
sum2 += val[i][y];
}
i = sear(sum2 + value);
while (val_flag[i*i - sum2] == 1||square_flag[i]==1)
{
i++;
}
val[x][y] = i*i - sum2;
val_flag[i*i - sum2] = 1;
square_flag[i] = 1; dfs(x, y+1, value);
}
else if (y == n)
{
long long i,sum2=0;
for (i = 1; i <= n - 1; i++)
{
sum2 += val[x][i];
}
i = sear(sum2 + value); while (val_flag[i*i - sum2] == 1)
{
i++;
}
val[x][y] = i*i - sum2;
val_flag[i*i - sum2] = 1;
square_flag[i] = 1; dfs(x + 1, 1, value);
}
else
{
val[x][y] = value;
val_flag[value] = 1;
if (val_flag[value+1] == 0)
{
dfs(x, y + 1, value+1);
}
else
{
while (val_flag[value+1] == 1)
{
value++;
}
dfs(x, y + 1, value+1);
}
}
} int main()
{
scanf("%d", &n);
if (n == 1)
{
cout << "No Solution" << endl;
}
else
{
memset(square_flag,0,sizeof(square_flag));
memset(val_flag, 0, sizeof(val_flag)); dfs(1, 1, 1);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
51nod 1438:方阵与完全平方数的更多相关文章
- 51Nod 欢乐手速场1 C 开心的小Q[莫比乌斯函数]
开心的小Q tangjz (命题人) quailty (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的 ...
- 51nod1787最大子方阵
51nod1787最大子方阵 我在51nod上面切的第一道题 我在51nod上面切的第一道8级题 我在51nod上面切的第一道8级题的一血 题目大意 有一个n*m的矩阵,矩阵中的每一个元素是'X'或者 ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- [LeetCode] Valid Perfect Square 检验完全平方数
Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...
- [LeetCode] Perfect Squares 完全平方数
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
随机推荐
- Windows驱动开发-符号链接和设备名
windows下的设备是以"\Device\[设备名]”形式命名的. 例如磁盘分区的C盘,D盘的设备名称就是 "\Device\HarddiskVolume2” "\De ...
- IDEA配置Scala开发环境
1.下载scala sdk 到页面 https://www.scala-lang.org/download/2.10.5.html 下载sdk,大数据平台目前的scala版本是2.10.5,下载后解压 ...
- An attempt was made to call the method com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder; but it does not exist. Its class, com.google.gson.GsonBuilder, is available from the foll
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/G:/sharp/repo ...
- django中使用ORM模型修改数据库的表名
在django中,使用models.py创建好一张表后,如果不指定表的名字,那么表的名字就默认为 model_modelname 例如: class Book(models.Model): id = ...
- php 文件缓存 include vs serialize vs json_encode
大神:http://techblog.procurios.nl/k/news/view/34972/14863/cache-a-large-array-json-serialize-or-var_ex ...
- jmeter非GUI模式命令
一.如果没有.jtl文件,运行如下命令: jmeter -n -t baidu.jmx -l result.jtl 以非GUI形式运行Jmeter脚本jmeter -n -t baidu.jmx -l ...
- 十五、React:简单点餐实例:知识点,html解析写法
一.功能 从首页列表点进去,转到详情页 列表.详情从Api获取 Api列表:http://a.itying.com/api/productlist 详情:http://a.itying.com/api ...
- 【转帖】影响超 10 亿设备,博通和 Cypress 芯片曝惊天漏洞,苹果、华为、三星等中招
影响超 10 亿设备,博通和 Cypress 芯片曝惊天漏洞,苹果.华为.三星等中招 https://www.infoq.cn/article/lpNEQGrxZL22gHDPBE2z 26 ...
- P1006 换个格式输出整数
这道题相较于上一题来说就简单了许多.看题. 怎么感觉这道题有点类似P1002写出这个数.流程差不多,思路大致是先求出每一位上的数,然后根据 百十个 的顺序输出结果.题目比较简单,不做赘述,贴代码 代码 ...
- 3 —— node —— 文件追加内容
思想 : 先读取 , 再追加 const fs = require('fs') fs.readFile("./hello.txt","utf-8",(err,d ...