博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵
阅读量:6907 次
发布时间:2019-06-27

本文共 1045 字,大约阅读时间需要 3 分钟。

题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离。

只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了。

这里有个坑,比如:

1 1 9 9 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

很明显最大的就是将一个9转到矩阵角,而这里更新最大值时很容易把另一种情况屏蔽掉,从而错过了更少步骤达到最大值的方法。

代码:

 

/**  Author:      illuz 
* Blog: http://blog.csdn.net/hcbbt* File: 3.cpp* Create Date: 2013-09-08 14:21:58* Descripton: simulate */#include
#include
using namespace std;#define rep(i, n) for (int i = 0; i < (n); i++)const int MAXN = 100;int a[MAXN][MAXN];int n, sum, cnt;void solve(int k, int l) { int tmp = -0xffffff, tt = 0; rep(i, l - 1) { int t = a[k][k + i] + a[k + i][k + l - 1] + a[k + l - i - 1][k + 0] + a[k + l - 1][k + l - i - 1]; if (tmp <= t) { if (tmp == t) tt = min(tt, min(i, l - i - 1)); else tt = min(i, l - i - 1); tmp = t; } } sum += tmp; cnt += tt;}int main() { while (scanf("%d", &n) && n) { rep(i, n) rep(j, n) scanf("%d", &a[i][j]); int l = n / 2; sum = a[l][l]; cnt = 0; rep(i, l) solve(i, n - 2 * i); printf("%d %d\n", sum, cnt); } return 0;}

 

 

你可能感兴趣的文章
10 - JavaSE之网络编程
查看>>
澳洲实施无人机新规,规则变得更为简单
查看>>
日志服务(2018-08)6月新功能发布
查看>>
代理那些事
查看>>
Elasticsearch未授权访问漏洞
查看>>
Hadoop I/O操作原理整理
查看>>
redis必杀命令:集合(Set)
查看>>
Postgresql数据库数据简单的导入导出
查看>>
区块链除了发币其它功用估计不值钱
查看>>
亚马逊Alexa绑定美国运通卡,说一声即可支付账单
查看>>
黑客常用WinAPI函数整理
查看>>
AI总会有低潮,但为什么科学家们一直有快感?
查看>>
IDC:研究表明云计算支出将逐年增长
查看>>
WasteShark:海洋世界的清洁工
查看>>
交通部:加快ETC推广,探索在城市停车等领域广泛应用
查看>>
ecshop 工作流程加载配置介绍
查看>>
中国IT移动智库平台“找专家”正式上线
查看>>
PHP中获取星期的几种方法
查看>>
华夏银行与蚂蚁金服达成战略合作,开创银行移动数字化转型新趋势
查看>>
新华三发布“物联校园”解决方案,瞄准普教场景 引领智慧转型
查看>>