https://www.codechef.com/problems/MTRNSFRM

我只能说codechef的题好劲爆,这题居然是easy的题,太可怕了。而且还有一点就是codechef的题解很难看懂╮( ̄▽ ̄")╭

这题可以这样做,首先把两个矩阵合并在一起,然后就是变成了在一个矩阵C中,操作行和列的+1或者-1,最终使得整个矩阵为0。

那么。对于每一行,的操作,我设为row[i],意思就是这一行进行的是什么操作,要么+,要么-,不可能又加又减的,因为都是整行的操作。然后同理设出col[j]。

然后,如果有解,那么需要每个c[i][j] + row[i] + col[j] == 0恒成立。

在上面的方程中,有两个未知数,因为其是互相独立的,那么特殊值一个先,先设i = 1

有col[j] = -row[1] - c[1][j]  ① (这个就是col[j]的方程,因为只有j这个未知数)row[1]可以暴力出来,或者二分出来,反正是常数,那么带入去原来的式子,有:row[i] = row[1] + c[1][j] - c[i][j]

同样是因为独立,所以特殊值那个j = 1,所以row[i] = row[1] + c[1][1] - c[i][1] ②

有了上面两条式子,要判定c[i][j] + row[i] + col[j] == 0是否成立就简单了,带进去即可。

求解:

解的大小是sigma abs(row[i])   + sigma abs(col[j])

目标是最小化这个函数。

其中有一个x(row[1])是还没确定的呢。

把公式拆开,就是sigma(abs(c[i][1] - c[1][1] - x)) + sigma(-c[1][j] - x)

那么就是求一个点x,到c[i][1] - c[1][1]   和  -c[1][j]  这n + m个点的总和最小。

中间值即可。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
const int maxn = 1e5 + 20;
vector<LL>a[maxn], ta[maxn];
vector<LL>vc;
void work() {int n, m;scanf("%d%d", &n, &m);vc.clear();for (int i = 1; i <= n; ++i) {a[i].clear();ta[i].clear();a[i].push_back(0);}for (int i = 1; i <= 2; ++i) {for (int j = 1; j <= n; ++j) {for (int k = 1; k <= m; ++k) {LL x;if (i == 1) {scanf("%lld", &x);a[j].push_back(x);} else {scanf("%lld", &x);a[j][k] -= x;}}}}for (int i = 1; i <= n; ++i) ta[i] = a[i];for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {if (a[i][j] + a[1][1] - a[i][1] - a[1][j] != 0) {cout << -1 << endl;return;}}}vc.push_back(-((1LL) << 62));for (int i = 1; i <= n; ++i) {vc.push_back(a[i][1] - a[1][1]);}for (int j = 1; j <= m; ++j) {vc.push_back(-a[1][j]);}sort(vc.begin(), vc.end());LL ans = 0;for (int i = 1; i < vc.size(); ++i) {ans += abs(vc[i] - vc[(n + m + 1) / 2]);}cout << ans << endl;
}int main() {
#ifdef localfreopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endifint t;scanf("%d", &t);while (t--) work();return 0;
}

View Code

转载于:https://www.cnblogs.com/liuweimingcprogram/p/6348095.html

Matrix Transformation codechef 数学题相关推荐

  1. OpenGL笔记之矩阵变换(Matrix Transformation)

    本文是学习OpenGL过程中的一篇笔记.在学习过程中,主要参照了大名鼎鼎的 <OpenGL Programming Guide>(中文名<OpenGL编程指南>,有些人还称之为 ...

  2. UNITY_MATRIX_IT_MV[Matrix]

    http://blog.csdn.net/cubesky/article/details/38682975 前面发了一篇关于unity Matrix的文章. http://blog.csdn.NET/ ...

  3. android TranslateAnimation动画执行时的坐标获取。

    android 的Tween动画并不会改变控件的属性值,比如以下测试片段: 定义一个从屏幕右边进入,滚动到屏幕左边消失的一个TranslateAnimation动画: <?xml version ...

  4. vs移植的.exe再编译无法更新_关于freetype的移植和其官方demos的使用总结

    # 关于freetype的移植和其官方demos的使用总结 转载时请标明出处 作者联系方式QQ:854290197 一.Windows下移植feetype到工程中 步骤如下: 1.从官网上下载最新的 ...

  5. 【Paper】2020_Distributed optimal consensus with obstacle avoidance algorithm of mixed-order UAVs

    Yang X, Wang W, Huang P. Distributed optimal consensus with obstacle avoidance algorithm of mixed-or ...

  6. 相机标定原理和opencv代码解析

    1.单目标定 单应矩阵 设三维空间点的齐次坐标,对应的图像坐标为 他们满足一下关系: s为尺度因子,K为内参矩阵 R和T旋转平移矩阵统称为外参 假设我们提供K个棋盘图像,每个棋盘有N个角点,于是我们拥 ...

  7. 基于Matlab的LDPC码性能研究毕业设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 本科毕业设计(论文) 题 目    LDPC码性能研究 摘 要     信道编码是数字通信系统的 ...

  8. 一文细数Vision transformer家族成员

    可以看作是vision transformer的idea集,查漏补缺使用.需要精读的文章前面加了*号,均附有文章链接及代码链接. 下面这个链接基本上有所有的ViT的论文地址:https://githu ...

  9. AGG第十八课 agg::trans_affine仿射变换

    1 affine仿射变换概念 在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affinis,"和...相关")由一个线性变换接上一个平移组成. 2  agg ...

  10. 3d激光雷达开发(旋转和位移)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 对于点云数据来说,旋转和位移的计算是十分必要的.比如数据匹配.识别.定位,如果需要查看获得的旋转 ...

最新文章

  1. PNAS-2018-根系分泌物香豆素调控微生物群落结构并促进植物健康
  2. Python Challenge-Level 1
  3. Mac下如何查看Python的版本?
  4. 快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)
  5. java 自定义注释_带有自定义注释的Java注释教程
  6. 计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc
  7. 更新pip版本至最新
  8. Ubuntu 安装 peek 动态截图软件
  9. opencv马赛克python实现
  10. 安卓linux获取最高权限获取,安卓root是什么意思(获取手机最高权限)
  11. pythonpil安装教程_成功安装PIL步骤
  12. 网关统一配置解决跨域问题
  13. lxr-0.3.1 源码阅读 How To.
  14. SIMCOM 常用AT指令
  15. docker学习(容器虚拟化技术---华子需要)
  16. 日本价值链促进会(IVI)秘书长西冈靖之:日本工业互联网发展情况
  17. html5 比例尺,24厘米和4毫米的比例尺
  18. 【游戏精粹】独立非玩家角色合作行为的实现
  19. 社群营销的意义和价值
  20. 使用GAppProxy时安全证书无效的解决办法

热门文章

  1. gulpsass安装配置
  2. Thread调用SaveFileDialog
  3. 牛客小白月赛3 I 排名【结构体排序/较复杂/细节】
  4. 使用ILSpy软件反编译.Net应用程序的方法及注意事项
  5. Anyoffice -HTML5大赛 悦心(基于H5开发安卓音乐app)-项目总结
  6. 转: utf16编码格式(unicode与utf16联系)
  7. php 调试环境配置
  8. Bitmap对象保存到bmp文件中
  9. keepalived vrrp_script脚本不执行解决办法
  10. 在云端开展深度学习正逢其时