zoukankan      html  css  js  c++  java
  • CF92B-Binary Number-(思维)

    https://vjudge.net/problem/CodeForces-92B

    题意:给一个长度为106的二进制数,有两种操作,第一种是除以2,第二种是末尾+1,以二进制运算,问这个二进制数最少几次操作后变成1。

    思路:如果末尾是0,则是偶数,可以除以2,消去一个0;如果末尾是1,则是奇数,需要加1变成偶数,这样在末尾会产生一个0,并且左边会进位生出一个1。如果有一段连续的1,则会在连续1的左边生出一个1,连续的1串会变成0,逐个消掉就好了。

    mport java.util.Arrays;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.Scanner;
    
    public class Main{
        
        public static void main(String []args) {
            Scanner scan=new Scanner(System.in);
            String s;
            char [] a=new char[1000086];
            
            while(scan.hasNext()) {
                s=scan.next();
                s="0"+s;
                a=s.toCharArray();
                int len=s.length();
                int ans=0;
                for(int i=len-1;i>1;) {
                    if(a[i]=='0') {
                        ans++;
                        i--;
                    }else {
                        ans++;//+1操作
                        int num=0;//计数有多少个连续的1
                        while(a[i]=='1') {
                            num++;
                            i--;
                        }
                        ans=ans+num;//进位后都变成0,每个0需要一次除2操作
                        a[i]='1';//连续1前面的那一位被进位成1
                    }
                }
                System.out.println(ans);
            }
        }
    
    }
  • 相关阅读:
    8.14-T1村通网(pupil)
    8.10-Day2T3 镇守府
    8.10-Day2T2 吃喝大法好
    8.10-Day2T1最小值
    8.10-DayT3游走(wander)
    8.10-Day1T2圈(circle)
    8.10-Day1T1-数字(number)
    bzoj2462: [BeiJing2011]矩阵模板
    8.7-Day1T1
    k8s高可用部署后续:SLB
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/12075285.html
Copyright © 2011-2022 走看看