Codeforces #184 Div2 A 「Strange Addition」
問題
http://codeforces.com/contest/305/problem/A
訳
残念な事に、バーシヤは、10進数表記での任意の桁の位置に、少なくとも'0'がひとつあるような( a, b )でのみ、足し算する事ができる。例えば、バーシヤは505と50ならば足し算できるが、1と4はできない。
バーシヤはk個の互いに異なる正の整数 d1, d2, .... dk.を持っている。
バーシヤは任意の2つの数を選んだときに足し算が出来るような、数字のセットをここから選びたい。このルールを守って選んだとき、最大何個のセットが出来るかを出力せよ。
制約
1 <= k =< 100
1 <= k_i <= 100
考えた事
0, 100は何も考えずに選んでおk
5, 30とか1ケタ目と2ケタ目が干渉しないのがあればベスト
事後
さすがにその計算力はまずいぞバーシヤ
ソースコード
int main() { int N; cin >> N; int a[110]; for( int i = 0; i < N; i++ ){ cin >> a[i]; } bool use_1 = false; bool use_2 = false; bool use_12_find = false; int use_12_num = -1; int res = 0; int nums[4]; int size = 0; for( int i = 0; i < N; i++ ){ if( a[i] == 0 ){ nums[size++] = 0; }else if( a[i] == 100 ){ nums[size++] = 100; }else if( !use_1 && a[i] < 10 ){ use_1 = true; nums[size++] = a[i]; }else if( !use_2 && a[i] % 10 == 0 ){ use_2 = true; nums[size++] = a[i]; }else{ use_12_find = true; use_12_num = a[i]; } } if( use_12_find && !use_1 && !use_2 ) nums[size++] = use_12_num; cout << size << endl; for( int i = 0; i < size; i++ ){ cout << nums[i] << " "; } }