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);
	}
}