Matrix Transformation codechef 数学题
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 数学题相关推荐
- OpenGL笔记之矩阵变换(Matrix Transformation)
本文是学习OpenGL过程中的一篇笔记.在学习过程中,主要参照了大名鼎鼎的 <OpenGL Programming Guide>(中文名<OpenGL编程指南>,有些人还称之为 ...
- UNITY_MATRIX_IT_MV[Matrix]
http://blog.csdn.net/cubesky/article/details/38682975 前面发了一篇关于unity Matrix的文章. http://blog.csdn.NET/ ...
- android TranslateAnimation动画执行时的坐标获取。
android 的Tween动画并不会改变控件的属性值,比如以下测试片段: 定义一个从屏幕右边进入,滚动到屏幕左边消失的一个TranslateAnimation动画: <?xml version ...
- vs移植的.exe再编译无法更新_关于freetype的移植和其官方demos的使用总结
# 关于freetype的移植和其官方demos的使用总结 转载时请标明出处 作者联系方式QQ:854290197 一.Windows下移植feetype到工程中 步骤如下: 1.从官网上下载最新的 ...
- 【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 ...
- 相机标定原理和opencv代码解析
1.单目标定 单应矩阵 设三维空间点的齐次坐标,对应的图像坐标为 他们满足一下关系: s为尺度因子,K为内参矩阵 R和T旋转平移矩阵统称为外参 假设我们提供K个棋盘图像,每个棋盘有N个角点,于是我们拥 ...
- 基于Matlab的LDPC码性能研究毕业设计(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 本科毕业设计(论文) 题 目 LDPC码性能研究 摘 要 信道编码是数字通信系统的 ...
- 一文细数Vision transformer家族成员
可以看作是vision transformer的idea集,查漏补缺使用.需要精读的文章前面加了*号,均附有文章链接及代码链接. 下面这个链接基本上有所有的ViT的论文地址:https://githu ...
- AGG第十八课 agg::trans_affine仿射变换
1 affine仿射变换概念 在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affinis,"和...相关")由一个线性变换接上一个平移组成. 2 agg ...
- 3d激光雷达开发(旋转和位移)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 对于点云数据来说,旋转和位移的计算是十分必要的.比如数据匹配.识别.定位,如果需要查看获得的旋转 ...
最新文章
- PNAS-2018-根系分泌物香豆素调控微生物群落结构并促进植物健康
- Python Challenge-Level 1
- Mac下如何查看Python的版本?
- 快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)
- java 自定义注释_带有自定义注释的Java注释教程
- 计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc
- 更新pip版本至最新
- Ubuntu 安装 peek 动态截图软件
- opencv马赛克python实现
- 安卓linux获取最高权限获取,安卓root是什么意思(获取手机最高权限)
- pythonpil安装教程_成功安装PIL步骤
- 网关统一配置解决跨域问题
- lxr-0.3.1 源码阅读 How To.
- SIMCOM 常用AT指令
- docker学习(容器虚拟化技术---华子需要)
- 日本价值链促进会(IVI)秘书长西冈靖之:日本工业互联网发展情况
- html5 比例尺,24厘米和4毫米的比例尺
- 【游戏精粹】独立非玩家角色合作行为的实现
- 社群营销的意义和价值
- 使用GAppProxy时安全证书无效的解决办法