Codeforces 401C Team(贪心+暴力)

来源:互联网 发布:淘宝二手进口功放 编辑:程序博客网 时间:2024/04/25 22:11

题目链接:Codeforces 401C Team



题目大意:有n个0和m个1,要求将这些0和1排成一列,保证不会有两个0相邻,不会有连续的三个1,输出方案,不能满足的话输出-1.


解题思路:肯定能确定的是,1最少要分成n-1份,最多分成n+1份,三种情况统统考虑一下即可,注意细节。


#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int n, m;inline bool judge (int k) {if (k == 0) return false;int x = m/k;return x == 1 || (x == 2 && m%k == 0);}void put(int x, int y, int k) {for (int i = 0; i < k; i++) {for (int j = 0; j < x; j++) printf("1");if (i < y) printf("1");printf("0");}}void solve (int k) {int x = m/k, y = m%k;if (k < n) {printf("0");put(x, y, k);} else if (k == n) {put(x, y, k);} else {put(x, y, k-1);for (int i = 0; i < x; i++) printf("1");}printf("\n");}int main () {bool flag = true;scanf("%d%d", &n, &m);for (int i = n-1; i <= n+1; i++) if (judge(i)) {solve (i);flag = false;break;}if (flag) printf("-1\n");return 0;}


0 0
原创粉丝点击