CF1196C
-
题目
-
分析
模拟划线法:
图有点丑
画红色的部分就是不能到达的部分,初始化 x [ 0 ] = − 1 0 5 , x [ 1 ] = 1 0 5 x[0] = -10^5,x[1] = 10^5 x[0]=−105,x[1]=105 作为 x x x 方向的边界, y [ 0 ] = − 1 0 5 , y [ 1 ] = 1 0 5 y[0] = -10^5,y[1] = 10^5 y[0]=−105,y[1]=105 作为 y y y 方向的边界。对于 f i = 0 f_i = 0 fi=0 的情况更新就可以了。判断 N O NO NO 的情况是 x [ 0 ] > x [ 1 ] ∣ ∣ y [ 0 ] > y [ 1 ] x[0] > x[1] || y[0] > y[1] x[0]>x[1]∣∣y[0]>y[1] 此时不能到达的部分分布在所有地方。
-
代码
int main () { //freopen("input.in", "r", stdin); //freopen("test.out", "w", stdout); int q; read(q); while (q--) { int n; read(n); int x[3] = { -100000, 100000}; int y[3] = { -100000, 100000}; for (int i = 1; i <= n; i++) { int x0, y0, f1, f2, f3, f4; read(x0); read(y0); read(f1); read(f2); read(f3); read(f4); if (f1 == 0) { // 向左走 x[0] = max(x[0], x0); } if (f2 == 0) // 向上走 { y[1] = min(y[1], y0); } if (f3 == 0) // 向右走 { x[1] = min(x[1], x0); } if (f4 == 0) // 向下走 { y[0] = max(y[0], y0); } } if (x[0] <= x[1] && y[0] <= y[1]) { cout << 1 << " " << x[0] << " " << y[0] << endl; } else cout << 0 << endl; } return 0 ; }
-
题型
思维
拓展知识点:半平面交