codeforces #157 div2

こどふぉ初参加でした
ABCの3完
1516(青)だった。
codeforcesのルールがよく分からない。
1500以上だとdiv1?

A
各行が黒白互い違いになっていればYES,そうでないならNO

#include <cstdio>
using namespace std;

char a[8][8];
int main(){
	char c;
	bool f = true;
	for(int i = 0; i < 8; i++){
		for(int j = 0; j < 8; j++){
			scanf("%c", &a[i][j]);
			if(j!=0)
				if(a[i][j] == a[i][j-1])
					f = false;
		}
		if(!f){
			puts("NO");
			return 0;
		}
		scanf("%c", &c);
	}
	puts("YES");
	return 0;
}


B
1から100000まで全探索して魔方陣が成立するか判定

#include <cstdio>
using namespace std;

int a[3][3];

bool is_ok(int k){
	if(k != a[0][0] + a[1][1] + a[2][2]
		|| k != a[0][2] + a[1][1] + a[2][0])
		return false;
	for(int i = 0; i < 3; i++){
		int t = 0;
		for(int j = 0; j < 3; j++)
			t += a[i][j];
		if(k != t)
			return false;
	}
	return true;
}
int main(){
	for(int i = 0; i < 3; i++)
		for(int j = 0; j < 3; j++)
			scanf("%d", &a[i][j]);
	for(int i = 1; i <= 100000; i++){
		int k = i + a[1][0] + a[2][0];
		a[0][0] = i;
		a[1][1] = k - (a[0][1] + a[2][1]);
		a[2][2] = k - (a[0][2] + a[1][2]);
		if(a[1][1] < 1 || a[2][2] < 1) continue;
		if(is_ok(k)){
			for(int i = 0; i < 3; i++){
				for(int j = 0; j < 3; j++)
					printf("%d ", a[i][j]);
				puts("");
			}
			return 0;
		}
	}
	return 0;
}

C
基本的には貪欲法で一番上の桁にある0を一つ消せばよい。
ただし、すべての桁が1のとき、1を一つ消すのを忘れないようにする。
これを忘れていて、1回hackされた

#include <string>
#include <iostream>
using namespace std;

string d;
int main(){
	cin >> d;
	bool f = true;
	for(int i = 0; i < d.size(); i++){
		if(f && d[i] == '1' && i == d.size() - 1){
			break;
		}else if(f && d[i] == '0'){
			f = false;
		}else{
			cout << d[i];
		}
	}
	cout << endl;
	return 0;
}