Codeforces Beta Round #39

×○××× 1607 -> 1541

A Find Color

原点からの距離のfloorの偶奇で判定すればいいはず
距離がぴったり整数になるときは、特別扱いしないといけない。
本番では、距離がぴったり整数になるときの処理がまずくて Runtime Error で落ちた。


以下、practiceで通ったコード

#include<iostream>
using namespace std;

int main() {
  int x,y;
  cin>>x>>y;
  if(x == 0 || y == 0) {
    cout<<"black";
    return 0;
  }

  for(int i=0; i <= 2000; ++i) {
    if(i*i < x*x+y*y && (i+1)*(i+1) >= x*x+y*y) {
	if((i+1)*(i+1) == x*x+y*y) {
	  cout<<"black";
	} else if(x*y < 0) {
	  if(i%2) cout<<"black";
	  else cout<<"white";
	}else{
	  if(i%2) cout<<"white";
	  else cout<<"black";
	}
	break;
      }
  }
}

B Repaintings

英語が恐ろしく難しかった問題。
チェス盤の外側からちょうどxだけ内側の部分にいくつ黒があるか調べればいい。

#include<iostream>
using namespace std;

#define REP(i,a,b) for(i=a; i<b; ++i)
#define rep(i,n) REP(i,0,n)

int count(int n,int m) {
  if(n < 0 || m < 0) return 0;
  if(n%2 == 1 && m%2 == 1) return n*m/2+1;
  return n*m/2;
}

int main() {
  int n,m,i,j,k,x;
  cin>>n>>m;
  cin>>x;

  cout<<count(n-2*x+2,m-2*x+2)-count(n-2*x,m-2*x)<<endl;
}

C Berland Square

ある円に対して交差している円の数*2-1個の領域が増えるんじゃないかと思った。
2円が接している場合、中にもう一方の円を含む場合は領域が上下に分断されるので、交差するものとして考えないといけないのだと思う。
Pretest は通ったけれども、System testで落ちてしまった。