Codeforces #55 (div2) B "Fortune Telling"
問題:http://codeforces.com/contest/59/problem/B
参加形式:本番(out of competition)
カモミールの数とそれぞれのカモミールがもつ花弁の数が与えられる.「好き」「好きじゃない」と順番に花弁を取っていって,最後に取った花弁のときに「好き」となるようにカモミールを数本選び,その選び方のうち最大となるような花弁の総数が求める.
ある花弁をとったときに「好き」となるには,「好き」と「好きじゃない」が交互に現れるため,その花弁が全体からみて奇数回目である必要がある.よって,偶数個+(奇数個を奇数本)の時を求めればよい.この条件を満たすように目一杯選ぶ.偶数個の花弁しかない場合は0となる.
コード
import java.util.*; public class B_FortuneTelling { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(), r = 0; List<Integer> as = new ArrayList<Integer>(); for (int i = 0; i < n; ++i) { int a = s.nextInt(); if(a % 2 < 1){ r += a; }else{ as.add(a); } } Collections.sort(as, Collections.reverseOrder()); if(as.size() > 0){ for(int i = 0; i < as.size() - (1 - as.size() % 2); ++i){ r += as.get(i); } }else{ r = 0; } System.out.println(r); } }