Codeforces Round #502 (Div.1, Div. 2) に参加した感想
問題
コンテストの途中でトラブルなどがあったので、unratedなコンテストとなりました。
結果はB問題まで解くことができました。初めてコンテスト中にB問題を解くことができたので、進歩だと思います。
A. The Rank
ソート問題です。1行目にSmith君のテストの得点が与えられるので、その総得点が全体で何位となるかを答える問題です。ただし、点数が同じ場合はid順となりますが、Smith君のidは1なので考える必要はありません。
考え方
全員の総得点を降順に並べて、Smith君の点数と同じ配列の要素番号を出力すれば良いです。
と、考えたんですが、この問題ではソートする必要はありません。Smith君より点数の大きい人をカウントすれば大丈夫です。
B. The Bits
ビット単位ORに関する問題です。ビットを入れ替えてORを取ったときに、元のORと値が変わる入れ替えのパターンを数え上げる問題です。
考え方
各bitのパターンは、(0, 0)、(1, 1)、(0, 1)、(1, 0) の4通りしかないので、これらの数を数えます。そして、どのパターンとの交換でORの値が変わるかを考えます。
コード
import java.util.Scanner; public class ProblemB { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); String a = scan.next(); String b = scan.next(); long []k = new long[4]; for(int i = 0; i < n; i++) { char c1 = a.charAt(i); char c2 = b.charAt(i); if(c1 == c2) { if(c1 == '0') { k[0]++; }else { k[1]++; } }else { if(c1 == '0') { k[2]++; }else { k[3]++; } } } long ans = k[0] * (k[1] + k[3]) + k[2] * k[3]; System.out.println(ans); scan.close(); } }
感想
初めてB問題を解くことができてうれしかったです。途中でunratedとなってしまいましたが、僕のレートは下がる一方なので良かったのかな?
次もB問題を解けるように頑張ります。