なぜかJAVAで参戦。Python使わせてください。
とりあえず、過去問で練習してます。
だめだめですけど、自分の解答を載せます。
TopCoder SRM 430 DIV 2
Problem 500 BitwiseEquations
問題文(アカウントがないと見られません)
public class BitwiseEquations { public long kthPlusOrSolution(int x, int k) { long a = 0, shift = 0; while(k > 0) { if((x & 1) == 0) { a |= ((long)(k & 1) << shift); k >>>= 1; } x >>>= 1; shift++; } return a; } }xを2進数で表示したときに0になる桁に、kの2進数の1桁目から入れていく感じ。
問題文からこのことを理解できれば解ける。結構時間かかった。
TopCoder SRM 427 DIV 2
Problem 250 LoveCalculator
問題文
import java.util.Arrays; public class LoveCalculator { public String findBoy(String girl, String[] boys) { if(boys.length == 1) return boys[0]; Arrays.sort(boys); int[] love = new int[boys.length]; for(int i = 0; i < boys.length; i++) { int L = 0, O = 0, V = 0, E = 0; for(int j = 0; j < girl.length(); j++) { if(girl.charAt(j) == 'L') { L++; } else if(girl.charAt(j) == 'O') { O++; } else if(girl.charAt(j) == 'V') { V++; } else if(girl.charAt(j) == 'E') { E++; } } for(int j = 0; j < boys[i].length(); j++) { if(boys[i].charAt(j) == 'L') { L++; } else if(boys[i].charAt(j) == 'O') { O++; } else if(boys[i].charAt(j) == 'V') { V++; } else if(boys[i].charAt(j) == 'E') { E++; } } love[i] = ((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E))%100; } int max = love[0], maxI = 0; for(int i = 1; i < love.length; i++) { if(love[i] > max) { maxI = i; max = love[i]; } } return boys[maxI]; } }そのまんま。コード汚い。
0 件のコメント:
コメントを投稿