『题解』UVa online judge UVA13091 No Ball
题目大意
给定一张由字符组成的 \(5 \times 5\) 的照片,上面是一个运动员在场地上的情况。
具体的,照片中的 | 表示分界线,而 > 表示运动员的脚。
但拍照时可能由于某些不知名原因导致整张照片旋转了 \(180^{\circ}\)。那样的话运动员的脚就会变成 < 了。
例如,对于这样一张照片:
..|..
..|>.
..|..
..|..
..|..
旋转后会变成:
..|..
..|..
..|..
.<|..
..|..
你的任务是判断运动员的脚有没有超出分界线,当没有旋转时,运动员的脚应当在分界线左边。
多组数据,数据保证每张照片中只有一只脚,一条分界线
思路
分类讨论。
读入第一行时若读到 |,则记录分界线的 \(y\) 坐标。
读入时若检测到脚(> 或 <),则记录脚的 \(y\) 坐标,即为列数。顺便记录一下有没有旋转 \(180^{\circ}\)。
最后只需要看看有没有过线即可。
代码
#include <iostream>
using namespace std;
int t,y,fy; // y 表示运动员脚的 y 坐标,fy 表示分界线的 y 坐标
bool flag; // 是否被旋转了 180°
char c; // 用于读入
int main(){
cin >> t;
for(int i=1; i<=t; i++){
for(int i=1; i<=5; i++){
for(int j=1; j<=5; j++){
cin >> c;
if(i==1 && c=='|') fy=j; // 确定分界线 y 坐标,只用在第一行判断
if(c=='>') y=j,flag=0; // 照片没有旋转 180°,确定右脚 y 坐标
if(c=='<') y=j,flag=1; // 照片旋转了180°,确定右脚 y 坐标
}
}
printf("Case %d: ",i);
// 没有旋转时在分界线右边,或旋转后在分界线坐标,都视为超出界限
if(!flag && y>fy || flag && y<fy) puts("No Ball");
else puts("Thik Ball");
}
return 0;
}

浙公网安备 33010602011771号