题解 CF181A 【Series of Crimes】

引领天下

2020-02-13 19:37:09

Solution

来一发比较简单的题解。 显然要想构成一个矩形,那么已经给出的3个`*`的位置必然是有两个的行相同,有两个的列相同。 那么剩下的一个`*`的位置必然是给出的坐标中未出现重复的一个。 由于只有3个点,我们大可以排序之后分类讨论。 具体看代码: ```cpp #include<bits/stdc++.h> using namespace std; int n,m,t; struct Node{ int x,y; inline bool operator < (const Node&p)const{ return x!=p.x?x<p.x:y<p.y; } }a[4]; char c; int main(){ cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>c; if(c=='*')a[t].x=i,a[t++].y=j;//读入,如果为*则存下位置 } sort(a,a+t);//按照x,y双升序排序 if(a[0].x==a[1].x)cout<<a[2].x<<' '<<(a[0].y==a[2].y?a[1].y:a[0].y);//如果前两个点在一行,那么差的那个点必然在剩下的第三个点哪一行,如果1,3两个点在一列,那么差的那个点必然在2的列,否则在3的列。 else cout<<a[0].x<<' '<<(a[0].y==a[1].y?a[2].y:a[1].y);//同理,前两个点不在一行,那么差的点必然在1的行,如果1,3在一列,那么差的点在2的列,否则在3的列。 } ```