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で落ちてしまった。