6605: 所罗门王的宝藏

时间限制: 1 Sec  内存限制: 128 MB
提交: 109  解决: 44
[提交] [状态] [讨论版] [命题人:admin]

题目描述

据古代传说记载,所罗门王既是智慧的代表,又是财富的象征。他建立了强大而富有的国家,聚集了大批的黄金象牙和钻石,并把这些价值连城的珍宝藏在一个神秘的地方,这就是世人瞩目的“所罗门王的宝藏”。多少个世纪以来,人们一直在寻找这批早已失落的古代文明宝藏,寻找盛产黄金和钻石的宝地。曾经追寻所罗门王宝藏的冒险者们都一去不回,至今没人解开这个谜题。亨利男爵在一次幸运的旅途中意外地得到了三百年前一位葡萄牙贵族留下的写在羊皮卷上的所罗门王的藏宝图和一本寻宝秘籍。在这张藏宝图的诱惑下,亨利男爵邀请约翰上校和勇敢的猎象人夸特曼开始了寻找埋葬在黑暗地底的所罗门王宝藏的艰险历程。他们横穿渺无边际的沙漠和浓荫蔽日的原始森林,越过汹涌澎湃的激流险滩,翻越高耸入云的峻岭雪山,饱尝沙漠的酷热和冰雪严寒,在藏宝图的指引下来到非洲一个原始的神秘国度库库安纳。这里有残酷的人殉制度,有一个拥有一千个妻室的独眼暴君特瓦拉,有像兀鹫一般丑恶诡诈老而不死的女巫加古尔,还有美丽聪慧的绝代佳人弗拉塔。在这片陌生而又险象环生的土地上三位寻宝英雄历尽艰辛,终于在绝代佳人弗拉塔的帮助下在海底深处找到了珍藏这批价值连城宝藏的巨大的藏宝洞。然而在女巫加古尔的精心策划下,一场灭顶之灾正在悄悄逼近。

藏宝洞的洞门十分坚固且洞门紧闭,如果不知道开启洞门的秘密是无法打开藏宝洞的洞门。在藏宝洞的洞门一侧有一个奇怪的矩形密码阵列。根据寻宝秘籍的记载,在密码阵列每行的左侧和每列的顶端都有一颗红宝石按钮。每个按钮都可以向左或向右转动。每向左转动一次按钮,相应的行或列中数字都增 1。每向右转动一次按钮,相应的行或列中数字都减 1。在矩形密码阵列的若干特定位置镶嵌着绿宝石。只有当所有绿宝石位置的数字与藏宝图记载的密码完全相同,紧闭的洞门就会自动缓缓打开。女巫加古尔早已得知开门的秘密。为了阻止寻宝者打开洞门,女巫加古尔为开门的密码阵列设置了全0的初始状态。试图打开洞门的寻宝者如果不能迅速转动按钮使所有绿宝石位置的数字与藏宝图记载的密码完全相同,就会自动启动藏宝洞玄妙的暗器机关,使寻宝者遭到灭顶攻击而死于非命。

您能帮助三位寻宝英雄顺利打开藏宝洞的洞门吗?

编程任务:对于给定的密码阵列,找到获得正确密码的红宝石按钮的转动序列。

输入

输入的第一行中有一个正整数T(T≤5)表示有T组数据。每组数据的第一行有3个正整数n,m和k,表示洞门密码阵列共有n行和m列,0<n,m,k≤1000。各行从上到下依次编号为1,2,…,n;各列从左到右依次编号为1,2,…,m。接下来的k行中每行有三个整数x,y,c,分别表示第k个绿宝石在密码阵列中的位置和密码,x为行号y为列号,c为该位置处的密码。

输出

对于每组数据,用一行输出 Yes 或者 No。输出 Yes 表示存在获得正确密码的红宝石按钮的转动序列。输出 No 则表示无法找到获得正确密码的红宝石按钮的转动序列。

样例输入

2
2 2 4
1 1 0
1 2 0
2 1 2
2 2 2
2 2 4
1 1 0
1 2 0
2 1 2
2 2 1

样例输出

Yes
No

提示

对于100%的数据,1≤n,m,k≤1000,k≤n×m,∣c∣≤1,000,000。

来源/分类

福建OI2018

【小结】

我不喜欢读故事,但是中文还是可以接受。因为我菜。

【分析】

对这个题而言,每次只能整行或整列增减,那么合法的矩阵一定满足:

任意两行,每一列对应差相等。任何两列,每一行对应差相等。

然后不是绿宝石位置的点可以忽略。那么直接枚举宝石位置,检查差就行了。

【代码】

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const int MAX=1e5+5;
const double eps=1e-8;int row[1010][1010],col[1010][1010];
int visr[1010][1010];
int visc[1010][1010];
int x[1010],y[1010],c[1010];
int n,m,k,T;
int sub(int i,int j,int temp)
{return i>j?-temp:temp;
}
int main()
{scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&m,&k);memset(visr,0,sizeof(visr));memset(visc,0,sizeof(visc));for(int i=0;i<k;i++)scanf("%d%d%d",&x[i],&y[i],&c[i]);int flag=1;for(int i=0;i<k;i++){for(int j=i+1;j<k;j++){if(!visr[x[i]][x[j]]&&y[i]==y[j]){row[x[i]][x[j]]=sub(x[i],x[j],c[i]-c[j]);visr[x[i]][x[j]]=1;}else if(y[i]==y[j]&&row[x[i]][x[j]]!=sub(x[i],x[j],c[i]-c[j]))flag=0;if(!visc[y[i]][y[j]]&&x[i]==x[j]){col[y[i]][y[j]]=sub(y[i],y[j],c[i]-c[j]);visc[y[i]][y[j]]=1;}else if(x[i]==x[j]&&col[y[i]][y[j]]!=sub(y[i],y[j],c[i]-c[j]))flag=0;}}for(int i=1;i<=n;i++)if(visr[i][i]&&row[i][i]!=0)flag=0;for(int i=1;i<=m;i++)if(visc[i][i]&&col[i][i]!=0)flag=0;if(flag)puts("Yes");else puts("No");}
}

upc 6605: 所罗门王的宝藏(矩阵行列规律)相关推荐

  1. 中国石油大学 个人训练赛第五场C:所罗门王的宝藏(高斯消元)

    题目描述 据古代传说记载,所罗门王既是智慧的代表,又是财富的象征.他建立了强大而富有的国家,聚集了大批的黄金象牙和钻石,并把这些价值连城的珍宝藏在一个神秘的地方,这就是世人瞩目的"所罗门王的 ...

  2. Oracle对话框列间距太近,如何调整MathType矩阵行列间距

    矩阵在数学中也是非常常见一种,尤其是线性代数中,基本都是矩阵与行列式的天下,在编辑矩阵与行列式时都是使用MathType矩阵模板来进行编辑的,我们在用MathType编辑矩阵的的时候,有时会觉得矩阵的 ...

  3. 已知一个二维数组A 表示一个矩阵,求AT。 其中,AT 表示矩阵的转置。矩阵转置的含义:表示把一个矩阵行列互换。

    已知一个二维数组A 表示一个矩阵,求AT. 其中,AT 表示矩阵的转置.矩阵转置的含义:表示把一个矩阵行列互换. //传入需要验证的数组,在main里面调用该方法public static void ...

  4. 矩阵行列互换算法-二维数组

    矩阵行列互换算法的实例要从一个简单的例子来归纳 [1,2,3] [4,5,6] [7,8,9] --由---到-----> [1,4,7] [2,5,8] [3,6,9] 由上面的单行到下面的单 ...

  5. poj3041--Asteroids(二分匹配)[将矩阵行列转化为边]

    题目大意,给出n*n的矩阵,其中有m个流星,一下给出每颗流星的坐标,每一次攻击可以消除一行或一列的流星,问最少攻击几次? 竟然是二分匹配!竟然是二分匹配!竟然是二分匹配!竟然是二分匹配! 建图,以行为 ...

  6. 经典算法面试题目-置矩阵行列元素为0(1.7)

    题目 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is se ...

  7. opencv 矩阵行列求和

    一.矩阵的求和函数 函数: reduce(): 官方文档: Reduces a matrix to a vector. C++: void reduce(InputArray src, OutputA ...

  8. MATLAB矩阵行列

    经常行列傻傻分不清楚 A=[1  2  3  4  5; 12 12 14 56 657; 23 46 34 67 56 ]; A(2:3,1:3) ans = 12    12    14     ...

  9. upc 胖虎的序列(规律)

    问题 D: 胖虎的序列 题目描述 胖虎在SXYZ比较自闭,于是他自己就制造了一个序列,在这个序列里的数全部由正整数构成. 你别认为这个序列很神奇–其实就是1,2,3,4,-,n,其中n是给定的.胖虎满 ...

  10. matlab矩阵行列向量化,matlab矩阵向量化

    MATLAB自问世以来,就是以数 值计算称雄.MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使 的MATLAB高度"向量化".由于它不需定义数组的维数,并给出矩阵.. ...

最新文章

  1. CPU三级缓存技术解析
  2. 大龄屌丝自学笔记--Java零基础到菜鸟--028
  3. 在iOS中使用FilesApp
  4. 二、LInux系统安装Java
  5. pycharm中from xx import xx报错:Unresolved reference
  6. jquery validate常用方法及注意问题
  7. 天猫整站SSM-分页-总结(做个人学习笔记整理用)
  8. 最优化学习笔记(十七)——拟牛顿法(3)
  9. 搞定这个月薪50K的AI热门领域,看这9本书就够了
  10. 字符串(如何输入一行带有空格的字符串)
  11. opencv 图像颜色空间转换和特定颜色物体追踪
  12. php array函数 array_filter 过滤数组中的空值
  13. 揭秘:为何冬天成都游戏玩家整体水平会下滑?
  14. 黑马程序员:Java学习路线图上线了
  15. DM368串口通信调试
  16. 产品运输和使用振动环境的分类
  17. 定积分存在定理与原函数存在定理
  18. QLineEdit文件名正则表达式
  19. ios avplayer播放完毕监听
  20. 如何承接软件外包项目

热门文章

  1. Windows内网渗透之信息收集
  2. python 矩阵元素平方_NumPy之计算两个矩阵的成对平方欧氏距离
  3. 去重插入数据 mysql_mysql 数据去重
  4. CnOpenData中国行政区划数据简介
  5. 手把手教你制作gif动图,一分钟轻松学会
  6. 台式计算机无线网经常掉线,台式机无线上网经常断网怎么办呢
  7. Python 实现多个Excel工作表绘制曲线图
  8. 怎样在微信上发淘宝商品链接?
  9. 微信小号来了,微信小号怎么申请(内附微信小号注册说明)
  10. java 16进制 负数_Java随笔:小心16进制负数