题意不太好理解 求横黑条 和竖黑条共有多少个 注意1*1的情况 如果横向纵向都是1*1 算为一个 否则不算
用了下vector 枚举找下
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
using namespace std;
#define N 30010
vector<int>p[N];
vector<int>q[N];
int o1[N],o2[N];
int main()
{
int i,j,m,n,k,x,y,t,sum=;
scanf("%d%d%d",&m,&n,&k);
for(i = ; i <= k ;i++)
{
scanf("%d%d",&x,&y);
p[x].push_back(y);
q[y].push_back(x);
}
for(i = ; i <= m ; i++)
p[i].push_back(n+);
for(i = ; i <= n ; i++)
q[i].push_back(m+);
for(i = ; i <= m ; i++)
{
t = ;
sort(p[i].begin(),p[i].end());
for(j = ; j < (int)p[i].size() ; j++)
{
if(p[i][j]-t>)
sum+=;
t = p[i][j];
}
}
for(i = ; i <= n ; i++)
{
sort(q[i].begin(),q[i].end());
t = ;
for(j = ; j < (int)q[i].size() ; j++)
{
if(q[i][j]-t>)
sum+=;
else if(q[i][j]-t>)
{
int ot = q[i][j]-;
t = ;
for(int g = ; g < (int)p[ot].size() ; g++)
{
if(p[ot][g]>i)
{
if(p[ot][g]-t<=)
sum+=;
break;
}
t = p[ot][g];
}
}
t = q[i][j];
}
}
printf("%d\n",sum);
return ;
}