SRM 144 DIV 1 300points
public class BinaryCode{
/**
* @param args
*/
public static String[] decode(String s)
{
int flg = 0;
int flg1 = 0;
String[] res = new String[2];
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = new StringBuffer();
sb.append('0');
sb1.append('1');
int it = s.charAt(0) - sb.charAt(0);
int it1 = s.charAt(0) - sb1.charAt(0);
sb.append(Integer.toString(it));
sb1.append(Integer.toString(it1));
int i;
for (i = 2; i < s.length(); i++) {
it = s.charAt(i - 1) - sb.charAt(i - 1) - sb.charAt(i - 2) + 48;
if (it != 0 && it != 1) {
flg = 1;
break;
}
sb.append(Integer.toString(it));
}
for (i = 2; i < s.length(); i++) {
it1 = s.charAt(i - 1) - sb1.charAt(i - 1) - sb1.charAt(i - 2) + 48;
if (it1 != 0 && it1 != 1) {
flg1 = 1;
break;
}
sb1.append(Integer.toString(it1));
}
if (sb.length() != s.length() || s.charAt(s.length() - 1) != (sb.charAt(s.length() - 1) + sb.charAt(s.length() - 2) - 48))
flg = 1;
if (sb1.length() != s.length() || s.charAt(s.length() - 1) != (sb1.charAt(s.length() - 1) + sb1.charAt(s.length() - 2) - 48))
flg1 = 1;
if (flg == 0)
res[0] = sb.toString();
else
res[0] = "NONE";
if (flg1 == 0)
res[1] = sb1.toString();
else
res[1] = "NONE";
return res;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String testCase = "123210122";
String[] outputString = decode(testCase);
System.out.println(outputString[0]);
System.out.println(outputString[1]);
}
}