CF92B-Binary Number-(思维)

Posted shoulinniao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
        }
    }

}

以上是关于CF92B-Binary Number-(思维)的主要内容,如果未能解决你的问题,请参考以下文章

CF 1215 B The Number of Products(思维题)

思维思维题——cf1350D

思维思维题——cf1350D

CF 729D 模拟,思维

CF1028C Rectangles 思维

CF1419ABCD 思维+数学