题解 CF181A 【Series of Crimes】
引领天下
2020-02-13 19:37:09
来一发比较简单的题解。
显然要想构成一个矩形,那么已经给出的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的列。
}
```