`
阿尔萨斯
  • 浏览: 4148468 次
社区版块
存档分类
最新评论

Codeforces 401C Team(贪心+暴力)

 
阅读更多

题目链接: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;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics