过年后的重新营业

思路: 存储位置
#include <iostream>
#include <cstring>
using namespace std;
bool isgar(int x[], int y[], int n, int a, int b)
{
bool f1 = false;
bool f2 = false;
bool f3 = false;
bool f4 = false;
for(int i=0; i<n; i++)
{
if(f1 && f2) break;
if(x[i] == a)
{
if(y[i] == b+1) f1 = true;
if(y[i] == b-1) f2 = true;
}
}
for(int i=0; i<n; i++)
{
if(f3 && f4) break;
if(y[i] == b)
{
if(x[i] == a+1) f3 = true;
if(x[i] == a-1) f4 = true;
}
}
if(f1 && f2 && f3 && f4) return true;
else return false;
}
int score(int x[], int y[],int n, int a, int b)
{
int sc = 0;
for(int i=0; i<n; i++)
{
if(x[i] == a-1)
{
if(y[i] == b-1) sc++;
if(y[i] == b+1) sc++;
}
if(x[i] == a+1)
{
if(y[i] == b-1) sc++;
if(y[i] == b+1) sc++;
}
}
return sc;
}
int main()
{
int n;
cin>>n;
int x[n];
int y[n];
int a,b;
int res[5];
memset(res, 0 ,sizeof(res));
for(int i=0; i<n; i++)
{
cin>>a>>b;
x[i] = a;
y[i] = b;
}
for(int i=0; i<n; i++)
{
if(isgar(x, y, n, x[i], y[i]))
{
if(score(x, y, n, x[i], y[i]) == 0) res[0] += 1;
if(score(x, y, n, x[i], y[i]) == 1) res[1] += 1;
if(score(x, y, n, x[i], y[i]) == 2) res[2] += 1;
if(score(x, y, n, x[i], y[i]) == 3) res[3] += 1;
if(score(x, y, n, x[i], y[i]) == 4) res[4] += 1;
}
}
for(int i = 0; i<5; i++)
cout<<res[i]<<endl;
}
本来一开始想存整个坐标轴,首先,数据过于庞大会爆栈,另一方面,负数也很不好处理,所以就改成了存储位置,还要感谢阙先生的热心帮助(疯狂打call)
心得:嗯,我好菜呀
网友评论