题解:P6330 [COCI2007-2008#1] CETVRTA
首先大家需要知道什么是矩形,如下图所示。矩形是四个角均为 90 度的特殊的平行四边形。既然是平行四边形,那么一定对边平行且相等,即 $AB = CD$ 且 $AB \parallel CD$,$AD = BC$ 且 $AD\parallel BC$。那么就有 $A$ 与 $D$,$B$ 与 $C$ 的 $x$ 轴坐标相等;$A$ 与 $B$,$C$ 与 $D$ 的 $y$ 轴坐标相等。

那么就有,输入的三个数中,找出单独未配对的点 $x$ 坐标与 $y$ 坐标,输出即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <iostream> using namespace std; int main() { int x1,y1,x2,y2,x3,y3; cin>>x1>>y1>>x2>>y2>>x3>>y3; if(x1 == x2) cout<<x3<<" "; if(x1 == x3) cout<<x2<<" "; if(x2 == x3) cout<<x1<<" "; if(y1 == y2) cout<<y3<<endl; if(y1 == y3) cout<<y2<<endl; if(y2 == y3) cout<<y1<<endl; return 0; }
|
不知道大家看到找未配对的数后有什么联想?
提示:两个相同的数进行异或值为 $0$。
因此就可以把 $x$ 与 $y$ 分别异或,那么配对的数值为 $0$,剩下的答案也就是要输出的数了。
1 2 3 4 5 6 7 8 9
| #include <iostream> using namespace std; int main() { int x,y,ansx = 0,ansy = 0; for(int i = 1;i <= 3;i++) cin>>x>>y,ansx ^= x,ansy ^= y; cout<<ansx<<" "<<ansy<<endl; return 0; }
|