CF283に参加。
ABCと解いたもののBで若干TLEするコードを書いたせいでレート減。
http://codeforces.com/contest/498/problem/A
問題
2次元座標上で、N個の直線ax+by+c=0が与えられる。
(x1,y1)から(x2,y2)に移動するとき、最小何個の直線をまたぐ必要があるか。
解法
ax+by+cに(x1,y1)及び(x2,y2)を代入し、符号が片方正片方負なら、その直線はまたぐ必要がある。
ll X[2],Y[2]; int N; ll A[1000],B[1000],C[1000]; void solve() { int i,j,k,l,r,x,y; string s; cin>>X[0]>>Y[0]; cin>>X[1]>>Y[1]; cin>>N; x=0; FOR(i,N) { cin>>A[i]>>B[i]>>C[i]; ll aa=A[i]*X[0]+B[i]*Y[0]+C[i]; ll bb=A[i]*X[1]+B[i]*Y[1]+C[i]; if(aa<0 && bb>0) x++; if(aa>0 && bb<0) x++; } cout<<x<<endl; }
まとめ
これはあっさり。