Nice Matrix

题意:给你一个 n*m 的矩阵,你可以每次将其中一个数 +1 或 1 ,求多少次可以使矩阵每一行每一列为回文的。
思路:开始想着算下行和列的平均值做个比较,但写到后面发现保证不了最小次数,然后返回题目中看到题干中有这样一句话if for any integer i (1≤i≤k) the equality ai=ak−i+1 holds.然后根据回文的性质容易得到要想让矩阵行和列为回文,那么矩阵中每个元素只与其它两个元素有关,即对于a[i][j],那么与之关联的就是a[i][mj+1]a[ni+1][j]。取这三个元素的中间值,使其它两个元素改变即可,遍历。
#include <set>
#include <map>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <vector>
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
 
 
using namespace std;
const int INF = 0x3f3f3f3f;//?????
typedef long long ll;
typedef long double ld;
typedef pair<ll, int>  pll;
typedef pair<int, int> pii; 
const int N = 1000000;
int a[105][105],b[55],prime[N],st[N];ll sum[N];
int cnt;
ll qpow(ll x,ll y,ll mod)
{
	int ans=1;
	while(y)
	{
		if(y&1) ans=ans*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return ans%mod;
}
void ola()
{
	for(int i=2;i<=1000000;i++)
	{
		if(st[i]==0)
		{
			prime[cnt++]=i;
		}
		for(int j=0;j<cnt&&i*prime[j]<=1000000;j++)
		{
			st[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		 } 
	}
}
int main()
{
	IOS;
	int t; cin >> t;
	while(t--)
	{
		int n,m; cin >> n >> m;
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=m;j++) {
				cin >> a[i][j];
			}
		}
		ll ans=0;
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=m;j++) {
				vector<int> tmp;
				tmp.push_back(a[i][j]);
				tmp.push_back(a[i][m-j+1]);
				tmp.push_back(a[n-i+1][j]);
				sort(tmp.begin(),tmp.end());
				a[i][j]=tmp[1],a[i][m-j+1]=tmp[1],a[n-i+1][j]=tmp[1];
				ans+=(tmp[1]-tmp[0])+(tmp[2]-tmp[1]);
			}
		}
		cout << ans << endl;
	}
	return 0; 
}


全部评论

相关推荐

01-12 14:08
门头沟学院 Java
有寒假来武汉小米总部实习的大学生嘛,我也是小米的员工,想找合租舍友,仅限女生可免租半月,二月初可入住,也就是说房租是2.15开始算的哦~也可以将行李提前放过来~房屋介绍:1、房子情况:有电梯;租的是三室一厅一卫一厨,&nbsp;但是有个卧室比较小,不打算找人,只住两个人就可以了;衣柜也很大,可以放下很多衣服;房屋采光真的很好,早上起来可以在床上晒太阳的那种,十分惬意(夏季晚上十分好看!)2.&nbsp;楼下离我们很近的地方有小吃街和一个两层大超市(大概步行两分钟多就可以走到)&nbsp;,还有一个新开的麦当劳,晚上可以去吃小吃,购买物资也可以去大超市;3.&nbsp;房子基本设施齐备(洗衣机,冰箱,空调,油烟机,热水器);4.&nbsp;我有稳定的工作,生活中很注意卫生,周末有时间会自己做饭,可以投喂哦~5.&nbsp;出行:距离公交站步行10分钟不到,距政务中心,武汉小米总部三站(晚上我都是走回来的,很近的~);一个比较进的地铁,距离大概1km左右;出入我觉得很方便;6.&nbsp;房租:1150每月,押一付二,无物业费,也没有中介费和其他额外费用。7.&nbsp;民用水电燃气,用多少交多少,水电费正常平摊。希望你是:1.&nbsp;女生(本人女),不带异性回家,如有同性朋友来玩,最多过夜一晚;2.&nbsp;爱干净,讲卫生,作息正常,不吵闹,有稳定工作;3.&nbsp;好沟通,有任何问题一定要沟通,不要闷着!中介勿扰,非诚勿扰!!!希望不要浪费彼此的时间诚心有意向的可以联系我看房
租房找室友
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务