亚马逊 在线测试题目 amazon


分析:其实就是求矩形中某一个点到其他点的距离加权最小
方法一:
对每一个点求其到其他点的加权距离,然后比较最小。由于有M*N个点,对每一个点求加权距离是O(M*N)的,所以整体时间复杂度是O(M*M*N*N)的。
方法二:
首先做预处理,计算每一行有多少个点,每一列有多少个点,然后计算把其他行的点挪到我这一行需要的加权距离,把其他列的点挪到我这一列的加权距离,
然后对每一个点,计算挪到其所在行的代价+所在列的代价和,求出最小。时间复杂度O(M*N)。
code见下面,calcMIN是方法一,calcDiego是方法二。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define MAX_SIZE 500 int arr[MAX_SIZE][MAX_SIZE];
int sumOfRow[MAX_SIZE];
int sumOfCol[MAX_SIZE];
int costOfRow[MAX_SIZE];
int costOfCol[MAX_SIZE]; int rtnRow;
int rtnCol; int calcCost(int row, int col, int x, int y)
{
int cost = ;
for(int i = ; i < row; i++)
{
for(int j = ; j < col; j++)
{
if(arr[i][j] != )
{
cost += (abs(x-i) + abs(y-j)) * arr[i][j];
}
}
}
return cost;
} void calcMin(int row, int col)
{
long long minCost = LLONG_MAX;
long long tmpCost = ;
for(int i = ; i < row; i++)
{
for(int j = ; j < col; j++)
{
tmpCost = calcCost(row, col, i, j);
if(tmpCost < minCost)
{
minCost = tmpCost;
rtnRow = i;
rtnCol = j;
}
}
}
} void calcDiego(int row, int col)
{
for(int i = ; i < row; i ++)
{
sumOfRow[i] = ;
costOfRow[MAX_SIZE] = ;
} for(int j = ; j < col; j++)
{
sumOfCol[j] = ;
costOfCol[MAX_SIZE] = ;
} for(int i = ; i < row; i ++)
{
for(int j = ; j < col; j++)
{
sumOfRow[i] += arr[i][j];
sumOfCol[j] += arr[i][j];
}
} for(int i = ; i < row; i ++)//cost for moving row j to row i
{
for(int j = ; j < row; j ++)
{
if(i == j || sumOfRow[j] == )
continue;
costOfRow[i] += (abs(j-i)) * sumOfRow[j];
}
} for(int i = ; i < col; i ++)//cost for moving col j to col i
{
for(int j = ; j < col; j ++)
{
if(i == j || sumOfCol[j] == )
continue;
costOfCol[i] += (abs(j-i)) * sumOfCol[j];
}
} int cost = INT_MAX;
for(int i = ; i < row; i ++)
{
for(int j = ; j < col; j ++)
{
if(costOfRow[i] + costOfCol[j] < cost)
{
cost = (costOfRow[i] + costOfCol[j] );
rtnRow = i;
rtnCol = j;
}
}
} } int main()
{
int i, j;
int row, col;
cout << "INT_MAX\t" << INT_MAX << endl;
cout << (500ULL**) << endl;
while (scanf("%d%d", &row, &col) == ) {
for (i = ; i < row; i++)
{
for (j = ; j < col; j++)
{
scanf("%d", &arr[i][j]);
}
}
//printf("calc\n " );
calcMin(row, col);
printf("%d %d\n", rtnRow, rtnCol);
calcDiego(row, col);
printf("%d %d\n", rtnRow, rtnCol); } return ;
}
亚马逊 在线测试题目 amazon的更多相关文章
- 亚马逊 在线测试题目 amazon (变种的)三叉树的最近公共祖先问题
题目意思就是找一棵按上面链接所示的树对应的上面的两个点的最小公共祖先(LCP,Least Common Father),按照比较大小来依次返回自己的父亲节点就行了.具体看代码:getfather(a) ...
- 亚马逊记AWS(Amazon Web Services)自由EC2应用
很长时间,我听到AWS能够应用,但是需要结合信用卡,最近申请了. 说是免费的,我还是扣6.28,后来我上网查了.认为是通过进行验证.像服务期满将返回. 关键是不要让我进入全抵扣信用卡支付passwor ...
- 最新亚马逊 Coupons 功能设置教程完整攻略!
最新亚马逊 Coupons 功能设置教程完整攻略! http://m.cifnews.com/app/postsinfo/18479 亚马逊总是有新的创意,新的功能.最近讨论很火的,就是这个 Coup ...
- [转]Amazon AWS亚马逊云服务免费一年VPS主机成功申请和使用方法
今天部落将再次为大家介绍如何成功申请到来自亚马逊的Amazon AWS免费一年的VPS主机服务.亚马逊公司这个就不用介绍了,是美国最大的一家网络电子商务公司,亚马逊弹性计算云Amazon EC2更是鼎 ...
- 在亚马逊amazon的AWS上安装Node和MongoDB服务器
在亚马逊amazon的AWS上安装Node和MongoDB服务器 在建立AWS上账号.创建EC2 ,用putty链接上之后,就可以用下面的方法开始安装. !!! 如果不是是自己建立的EC2, 而是由B ...
- 亚马逊云服务器VPS Amazon EC2 免费VPS主机配置CentOS及其它内容
Amazon目前提供为期一年的免费VPS服务,可到地址http://aws.amazon.com 进行申请. 现在对账号申请成功后,对VPS主机配置CentOS的过程做个图文介绍 1.创建实例(Ins ...
- 通过SecureCRT访问亚马逊Amazon EC2主机
亚马逊推出了免费的云主机服务器 Amazon EC2,它是通过安全密钥来访问主机的. 问题是下载的密钥在SecureCRT 上无法直接使用,需要转换. 下面的方法可以在自己的linux主机上生成sec ...
- http://aws.amazon.com/cn/ses/ 亚马逊 营销性非事务邮件发送平台
http://aws.amazon.com/cn/ses/ 亚马逊 营销性非事务邮件发送平台
- Android支付接入(八):Amazon亚马逊支付
下面跟大家一起走一遍Amazon亚马逊的支付,亚马逊目前刚把业务拓展到大陆市场,但这并不代表Amazon支付不成熟,恰恰相反,Amazon的支付流程,支付结果获取及测试另人称赞,支付流程.测试流程简洁 ...
随机推荐
- 【Window】Tor(洋葱头路由)+Privoxy 网络实践(附带Java实例代码)
1.背景 平时我们需要访问onion后缀的网站,需要通过Tor(The Onion Router,洋葱路由器).一般来说安装Tor Broswer就可以满足需要.但是项目我要做的是通过程序来获取oni ...
- linux下关于mysqldump备份的.sql导入数据库表数据丢失优化
直切正题 前2个随笔做了linux下自动备份,但是备份的.sql文件发现表数据丢失,原因是数据库太大我的数据库文件是804M,在用ftp拉去也会丢失数据 所以对db.sh备份数据库加一个压缩gizp ...
- phpStorm使用技巧及快捷键
下面是PhpStorm的注册码.Key,其license由用户名和License值组成. User name: EMBRACE License key: ===== LICENSE BEGIN === ...
- IS上部署MVC网站,打开后ExtensionlessUrlHandler-
以管理员运行下面的命令注册: 32位机器: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 64位机器: C:\W ...
- udev/raw/asmlib/多路径 配置asm
asmlib 是linux上面给磁盘/分区头上面打上asm的标记,供asm使用,而且当磁盘的盘符发生改变的时候,不会影响到asm disk,从效果上说,和udev没有本质区别,在redhat 4和5中 ...
- Python脚本控制的WebDriver 常用操作 <一> 启动浏览器
由于本人的学习定位是基于Selenium+WebDriver+Python+FireFox+Eclipse+Pydev, 所以我的笔记也只和这方面相关. 我打算先学习基于Python脚本WebDriv ...
- Mybatis 实现手机管理系统的持久化数据访问层
最近公司需要对客户手机进行管理并提供二维码存储手机串号的加密字符.供其他接入系统通过扫面二维码解析使用.系统提供手机信息管理,客户管理,用户管理功能. 1.使用到的POJO类 1.1 User pac ...
- 在JAVA中使用JSONObject生成json
JSON是一种轻量级的数据交换格式,在现在的web开发中,是非常常见的.在没有方便的工具之前,我们或许会使用拼字符串的形式来生成json数组,今天我们使用一个json-lib.jar包来为我们实现生成 ...
- XAML特殊字符
此部分只限制在XAML中,代码中不受此类限制. 1.特殊字符转义 XAML 特殊字符转义 特殊字符 转义 小于号 < < 大于号 > > 取址符 & & 引号 ...
- editplus文本编辑器
EditPlus中文破解版是一款功能强大的文本编辑器,拥有无限制的撤消与重做.英文拼字检查.自动换行.列数标记.搜寻取代.同时编辑多文件.全屏幕浏览功能.还有一个好用的功能,就是它有监视剪贴板的功能, ...