http://community.topcoder.com/stat?c=problem_statement&pm=12790&rd=15708

这道题只有两个操作,一是加一,二是数组所有元素乘以二,求最少操作次数从全0数组变成目标数组。我的方法是从目标数组反推全0数组,如果有奇数就变成偶数,全偶数就除以二。这个方法是可以过的,就是效率拙计:

import java.util.*;
public class IncrementAndDoubling
{
public int getMin(int[] A)
{
int count = 0;
int len = A.length;
while (true)
{
boolean done = true;
for (int i = 0; i < len; i++)
{
if (A[i] % 2 == 1)
{
A[i]--;
count++;
}
if (A[i] != 0)
done = false;
}
if (done) break;
for (int i = 0; i < len; i++)
{
A[i] = A[i] / 2;
}
count++;
}
return count;
}
}

但更好的方法如标程里所介绍,观察到除以2就是移位,0和1的转换。那么最后的结果其实是数组里所有二进制1的个数,加上最长的二进制表示长度。

int getMin(vector<int> desiredArray)
{
int mx = 1; // '0' has length 1
int sum = 0;
for (int x: desiredArray) {
int c = 0;
// extract bits from x:
while (x > 0) {
c++;
sum += x % 2; //the last bit
x /= 2;
}
mx = std::max(mx, c);
// the number c of bits is wrong for '0', but it doesn't matter
// because mx is initially set to 1.
}
return mx - 1 + sum;
}

  

  

[topcoder]IncrementAndDoubling的更多相关文章

  1. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  2. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  3. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  4. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  5. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  6. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. linux+asp.net core+nginx+sql server

    Linux Disibutaion:Ubuntu 16.04.1 LTS Web Server:Nginx.Kestrel 安装.net core sudo sh -c 'echo "deb ...

  2. 在XP系统下搭建maven环境出的问题 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre6\..\lib\tools.jar

    Build errors for spider; org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute g ...

  3. selinux理解1-selinux介绍

    安全增强式Linux(SELinux, Security-Enhanced Linux)是一种强制访问控制(mandatory access control)的实现.它的作法是以最小权限原则(prin ...

  4. iOS对textField进行字符长度限制的办法

    在项目开发过程中,遇到这么一个需求,编辑标签时,输入的最大长度需要限制为24个字节. 查阅了一些材料,并参考了之前项目的相关处理办法,今天在这里总结一下解决方案. 1.写一个截取字符串的方法,将超长的 ...

  5. ReactiveCocoa入门教程——第一部分(转)

    作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...

  6. PHP执行过程

    PHP执行过程     任何一种语言的源代码计算机都没有办法直接执行,需要转换成计算机能够识别的机器指令. PHP也是一门高级语言,也需编译(解释) PHP的解析过程: 1.请求源代码,进行词法解析, ...

  7. android 文件的权限

  8. Java多线程的安全问题

    /*多线程的安全问题1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候, ...

  9. Java实战之03Spring-04Spring的数据库访问

    四.Spring的数据库访问 1.DAO模式 /** * 抽取的一个类 * @author zhy * */ public class JdbcDaoSupport { private QueryRu ...

  10. Cannot connect to (local) sql server 2008

    Make following steps to solve the issue: Cannot connect to (local). ADDITIONAL INFORMATION: Login fa ...