codeforces 711B - Chris and Magic Square(矩阵0位置填数)
题目链接:http://codeforces.com/problemset/problem/711/B
题目大意:
输入 n ,输入 n*n 的矩阵,有一个占位 0 , 求得将 0 位置换成其他的整数 使得矩阵 行列斜 和全部相等。
代码状态:
一把辛酸泪

2016.09.24 8:14 再次更新 DOWN 【昨天晚上的‘杯具’要谨记,做题要看懂题,看清题的要求再做,切记、切记、切记】
补解题思路:
1.
1.1 先特殊判断 n 是否==1,如果等于 1 则直接输出 1 即可
1.2 如果 n > 1 判断 0 的位置在哪个位置,找一个要填入到0位置的数。
如果 0 在第一行,那么用第二行的和 减去 第一行的和,便是要填入的值.
如果 0 在最后一行,那么用倒数第二行的和 减去 最后一行的和,便是要填入的值.
其他的 则 0 在中间位置 ,那么可以用 前一行或者后一行的和 减去 0 所在的和,便是要填入的值.
(用列减也可以)
【看清题意,如果填入的值 <1 则输出 -1】
2.
将要填入的值填到 0 的位置 进行全部的扫描判断即可。全盘的扫描不在解释。
AC Code:
#include<bits/stdc++.h>
using namespace std;
const int N=+;
typedef long long ll;
ll na[N][N];
int check(int n)
{
ll ans=,ans1=;
int i,j;
for(i=; i<=n; i++)
ans+=na[][i],ans1+=na[i][];
if(ans!=ans1)
return ;
ans1=;
ll ans2=;
for(i=; i<=n; i++)
{
for(j=; j<=n; j++)
ans1+=na[i][j], ans2+=na[j][i];
if(ans!=ans2||ans1!=ans2||ans!=ans1)
return ;
ans1=ans2=; }
ans1=ans2=;
for(i=; i<=n; i++)
{
for(j=; j<=n; j++)
if(i==j)
ans1+=na[i][j],ans2+=na[i][n-i+];
}
if(ans!=ans2||ans1!=ans2||ans!=ans1)
return ;
return ;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int i,j;
if(n==)
{
scanf("%d",&n);
printf("1\n");
continue;
}
int x,y;
for(i=; i<=n; i++)
for(j=; j<=n; j++)
{
scanf("%d",&na[i][j]);
if(na[i][j]==)x=i,y=j;
}
ll ans=,ans1=;
if(x==)
{
for(i=; i<=n; i++)
ans+=na[][i],ans1+=na[][i];
na[x][y]=ans1-ans;
}
else if(x==n)
{
for(i=; i<=n; i++)
ans+=na[n][i],ans1+=na[n-][i];
na[x][y]=ans1-ans;
}
else
{
for(i=; i<=n; i++)
ans+=na[x][i],ans1+=na[x-][i];
na[x][y]=abs(ans1-ans);
} if(check(n))
printf("%I64d\n",na[x][y]<?-:na[x][y]);
else printf("-1\n");
}
return ;
}
codeforces 711B - Chris and Magic Square(矩阵0位置填数)的更多相关文章
- 【模拟】Codeforces 711B Chris and Magic Square
题目链接: http://codeforces.com/problemset/problem/711/B 题目大意: N*N的矩阵,有且只有一个0,求要把这个矩阵变成幻方要填什么正数.无解输出-1.幻 ...
- CodeForces 711B Chris and Magic Square (暴力,水题)
题意:给定n*n个矩阵,其中只有一个格子是0,让你填上一个数,使得所有的行列的对角线的和都相等. 析:首先n为1,就随便填,然后就是除了0这一行或者这一列,那么一定有其他的行列是完整的,所以,先把其他 ...
- CodeForces 711B Chris and Magic Square
简单题. 找一个不存在$0$的行,计算这行的和(记为$sum$),然后就可以知道$0$那个位置应该填的数字(记为$x$). 如果$x<=0$,那么无解,否则再去判断每一行,每一列以及两个斜对角的 ...
- 711B - Chris and Magic Square 模拟
题目大意:在num[i][j]==0处填一个数使每行,每列,对角线的和相同,若果有多种答案输出一种. 题目思路:模拟 #include<iostream> #include<algo ...
- CF 711B - Chris and Magic Square
挺简单的一道题,但是做的时候没想好就开始写代码了,导致迷之WA,还是要多练习啊. #include <iostream> #include <cstdio> #include ...
- codeforces 711B B. Chris and Magic Square(水题)
题目链接: B. Chris and Magic Square 题意: 问在那个空位子填哪个数可以使行列对角线的和相等,就先找一行或者一列算出那个数,再验证是否可行就好; AC代码: #include ...
- Codeforces Round #369 (Div. 2) B. Chris and Magic Square 水题
B. Chris and Magic Square 题目连接: http://www.codeforces.com/contest/711/problem/B Description ZS the C ...
- Codeforces Round #369 (Div. 2) B. Chris and Magic Square (暴力)
Chris and Magic Square 题目链接: http://codeforces.com/contest/711/problem/B Description ZS the Coder an ...
- Chris and Magic Square CodeForces - 711B
ZS the Coder and Chris the Baboon arrived at the entrance of Udayland. There is a n × n magic grid o ...
随机推荐
- CAP理论
自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度.NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据. CAP理论主张任何基于网 ...
- ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- jsp内置对象作业1-用户登录
题目:编写一个jsp程序,实现用户登录,当用户输入的用户名或密码错误时,将页面重定向到错误提示也,并在该页面显示30秒后,自动返回到用户登录页面. 1.用户登录页面 <%@ page langu ...
- git 高级命令
git bisect 运行git bisect 通常是为了找出某个导致版本库产生倒退或bug的特殊提交 例如:你的版本库已经从一个已知的"好"状态过渡到一个已知的"坏&q ...
- android 概述 及四大组件
目录: 概述 四大组件 UI布局 概述 android studio中,gen很bin文件夹合并为built文件夹 四大组件 包括: 活动,服务,内容提供者,广播接收者 活动是一种包含用户界面的组件 ...
- MyEclipse去除网上复制下来的来代码带有的行号
作为开发人员,我们经常从网上复制一些代码,有些时候复制的代码前面是带有行号,如: MyEclipse本身自带有查找替换功能,并且支持正则表达式替换,使用正则替换就可以很容易去除这些行号 使用快捷键“c ...
- 国外有哪些比较好的IT社区
作者:匿名用户链接:https://www.zhihu.com/question/35373320/answer/114468522来源:知乎著作权归作者所有,转载请联系作者获得授权. Github ...
- Eclipse中使用SVN
1.在Eclipse里下载Subclipse插件 方法一:从Eclipse Marketplace里面下载 具体操作:打开Eclipse --> Help --> Eclipse Ma ...
- js 时间与时间戳的转换
一:时间转时间戳:javascript获得时间戳的方法有四种,都是通过实例化时间对象 new Date() 来进一步获取当前的时间戳 1.var timestamp1 = Date.parse(n ...
- win10下安装Ubuntu出现win10无法进入的情况
昨天晚上在win10上安装Ubuntu Kylin16.04系统,结果发现重启的时候进不去windows系统了,而且报的错误是 /EndEntire file path: /ACPI(a0341d,0 ...