| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
终于AC了~~不过代码写得很长#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct node
{
int x;
int y;
};
vector<int> v_left;
vector<int> v_right; //存储左右两边点向四个方向能走的距离
bool graph_left[105][105];
bool graph_right[105][105];
int main()
{
int t = 0;
cin >> t;
while (t--)
{
int width = 0, height = 0, n = 0;
cin >> width >> height >> n;
node *point_left = new node[n]; //存储点的个数
node *point_right = new node[n];
memset(graph_left, 0, sizeof(graph_left));
memset(graph_right,0, sizeof(graph_right));
for (int i=0; i<n; i++)
{
cin >> point_left[i].x >> point_left[i].y;
graph_left[point_left[i].x][point_left[i].y] = true;
}
for (int i=0; i<n; i++)
{
cin >> point_right[i].x >> point_right[i].y;
graph_right[point_right[i].x][point_right[i].y] = true;
}
for (int i=0; i<n; i++)
{
int count = 0;
for (int j=point_left[i].x-1; j>=0; j--)
{
if (graph_left[j][point_left[i].y]) count++;
else break;
}
for (int j=point_left[i].x+1; j<width; j++)
{
if (graph_left[j][point_left[i].y]) count++;
else break;
}
for (int j=point_left[i].y+1; j<height; j++)
{
if (graph_left[point_left[i].x][j]) count++;
else break;
}
for (int j=point_left[i].y-1; j>=0; j--)
{
if (graph_left[point_left[i].x][j]) count++;
else break;
}
v_left.push_back(count);
}
for (int i=0; i<n; i++)
{
int count = 0;
for (int j=point_right[i].x-1; j>=0; j--)
{
if (graph_right[j][point_right[i].y]) count++;
else break;
}
for (int j=point_right[i].x+1; j<width; j++)
{
if (graph_right[j][point_right[i].y]) count++;
else break;
}
for (int j=point_right[i].y+1; j<height; j++)
{
if (graph_right[point_right[i].x][j]) count++;
else break;
}
for (int j=point_right[i].y-1; j>=0; j--)
{
if (graph_right[point_right[i].x][j]) count++;
else break;
}
v_right.push_back(count);
}
sort(v_left.begin(), v_left.end());
sort(v_right.begin(), v_right.end());
if (v_left == v_right) cout << "YES" << endl;
else cout << "NO" << endl;
v_left.clear();
v_right.clear();
delete []point_left;
delete []point_right;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator