bool ok(int zero, int one, int& sv, int& bn) { if (zero < 0 || one < 0) return false; sv = one / (zero + 1); bn = one % (zero + 1); if (sv == 1 || (sv == 2 && bn == 0)) return true; return false; } void display(int n, int m, int sv, int bn) { int sn = n + 1 - bn; int bv = sv + 1; while (bn > 0 || sn > 0) { if (bn > 0) { bn--; REP(i, bv) putchar(‘1‘); } else if (sn > 0) { sn--; REP(i, sv) putchar(‘1‘); } if (n-- > 0) putchar(‘0‘); } } int main() { // freopen("in.txt", "r", stdin); int n, m, sv, bn; while (~RII(n, m)) { if (ok(n, m, sv, bn)) { display(n, m, sv, bn); cout << endl; } else if (ok(n - 1, m, sv, bn)) { putchar(‘0‘); display(n - 1, m, sv, bn); cout << endl; } else if (ok(n - 2, m, sv, bn)) { putchar(‘0‘); display(n - 2, m, sv, bn); putchar(‘0‘); cout << endl; } else puts("-1"); } return 0; }
原文:http://blog.csdn.net/wty__/article/details/21042521