白駿12782位友情指数回答(JAVA)


質問リンク
質問する
陳紅は数字が好きだ.今日も数字の陳紅伊を游んで2つの数字のビット友情指数を求めてみました.ビット友情指数とは、10進数で表される2つの整数を2進数として表す場合に、2つの数字を等しくするために必要な最小演算回数を指す.演算の種類は以下の通りです.
2進数の任意の桁数を0または1に変更します.
1つのバイナリ数では、2つの数字の異なる位置の位置を変更します.
例えば、10進数11と12のビット友情指数を求める.11はバイナリ数1011、12はバイナリ数1100を表す.1011を2の桁に0(1011->1001)とし,1の桁と4の桁を互いに(1001->1100)1100とする.すなわち,1011を1100に変換する最小演算回数は2回であり,11と12のビット友誼指数は2である.
陳紅児は番組を作りたいと思っています.ある2つの数字が与えられたとき、2つのビット友情指数を求めます.しかし、残念ながら陳紅児はプログラミングが苦手で、10進数を2進数に変換するしかなかった.みんなは陳紅に2つのビット友情指数を求める番組を作ってあげましょう!
入力
入力された第1行は、試験例の個数T(1≦T≦50)を与える.
各テストケースの最初の行には、2つのバイナリ数N,Mが与えられる.N、Mの桁数は1000000を超えず、桁数は等しい.
しゅつりょく
各試験例は2ビット友情指数を出力する.
に答える
思ったより簡単に解ける.各ビット数の値を比較すると、
num 1を基準とすると、1であればtrans 0 Countが増加し、0であればtrans 1 Countが増加する.これにより、より大きな値が出力されます.
ソースコード
import java.util.*;
import java.io.*;
public class Main{
    
    public static void main(String [] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        final int NUMBER_OF_TESTCASE = Integer.parseInt(br.readLine());
        for(int i=0;i<NUMBER_OF_TESTCASE;i++) {
            int trans0Count = 0,
                trans1Count = 0;
            
            st = new StringTokenizer(br.readLine());
            String num1 = st.nextToken(),
                   num2 = st.nextToken();
            
            for(int k=0;k<num1.length();k++) {
                if(num1.charAt(k) != num2.charAt(k)) {
                    if(num1.charAt(k) == '1') trans0Count++;
                    else trans1Count++;
                }
            }
            
            if(trans0Count >= trans1Count) sb.append(trans0Count); 
            else sb.append(trans1Count);
            
            sb.append("\n"); 
            
        }
        
        
        bw.write(sb.toString());
        
        bw.flush();
        br.close();
        bw.close();
        
    }

    
}