http://codeforces.com/contest/489/problem/C
足根は大きな大きなに、最高レベルからのものである;すなわち、最下位桁から、それが小さい小として、次の最上位ビットの処理はゼロです。
少額以上の結果は何もない、分すぎ、全て合計0で、残りのすべての9がありませ
1つの パブリック クラスメイン{
2 公共 静的 ボイドメイン(文字列[]引数){
3 スキャナIO = 新しいスキャナ(System.in)。
4 INT LEN = io.nextInt()、和= io.nextInt()。
5 INT [] = maxの新しい INT [LEN + 1 ]。
6 INT []分= 新しい INT [LEN + 1 ]。
7
8 INT SUM1 =和、SUM2 = 和。
9 のために(int型 ; = iが<LEN; I = 1 SUM1 - =最大[I ++])MAX [I] = Math.min(9、SUM1);
10 用(INT I = LEN; I> = 1、。。SUM2 - =分[i--])分[I]は= Math.min(9 、SUM2);
11
12である // minは少なくとも、最上位ビットであります。1
13は、 IF(MIN == 0 [1])のための(INT I = 2であり、Iは<= LEN; I ++は)
14 IF(MIN [I]> 0 ){
15 分[I] - ;
16 分[1] ++ ;
17 BREAK ;
18れる }
。19
20である // SUM小さすぎる:分を全て0に設定されている
21は int型 nominの= 1 ;
22であります 以下のための(int型 ;;私は= LEN <I ++はiは1 =)場合 nomin = 0(分[I]!= 0);
23
24 // 合計太大:SUM1、SUM2没减完
25 の場合のSystem.out.println( " - 1((nomin == 1 && LEN = 1)|| SUM1 = 0 || SUM2 = 0!!!) -1" );
26 他{
27 のために(int型、iは= LEN <; I = 1 I ++ )System.out.print(MIN [I])。
28 System.out.print(」 " )。
29 のために(int型 ; iがLEN = <I ++は、I = 1をSystem.out.print(MAX [I]))。
30 }
31 }
32 }