您的位置:首页 > 其它

Codeforces 401C Team(贪心+暴力)

2014-03-12 21:19 531 查看
题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: