如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。

URAL/1628

来自"NOCOW"

跳转到: 导航, 搜索

啊,STL水过。。。

嗯,第400题,纪念下。。。

#include <cstdio>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
int n,m,k,ans;
vector<int> x[30001],y[30001];
vector<int>::iterator t;
int main()
{
    int i,j,a,b;
    scanf("%d%d%d",&n,&m,&k);
    for (ans=0,i=1;i<=n;++i)
    {
        y[i].push_back(0);
        y[i].push_back(m+1);
    }
    for (i=1;i<=m;++i)
    {
        x[i].push_back(0);
        x[i].push_back(n+1);
    }
    for (i=1;i<=k;++i)
    {
        scanf("%d%d",&a,&b);
        y[a].push_back(b);
        x[b].push_back(a);
    }
    for (i=1;i<=n;++i)  sort(y[i].begin(),y[i].end());
    for (i=1;i<=m;++i)  sort(x[i].begin(),x[i].end());
    for (i=1;i<=n;++i)
        for (j=1;j<y[i].size();++j)
            if (y[i][j]-y[i][j-1] > 2)
                ++ans;
            else if (y[i][j]-y[i][j-1] == 2)
            {
                a=y[i][j]-1;
                t=upper_bound(x[a].begin(),x[a].end(),i);
                b=*t;
                if (b-*(--t) == 2)  ++ans;
            }
    for (i=1;i<=m;++i)
        for (j=1;j<x[i].size();++j)
            if (x[i][j]-x[i][j-1] > 2)
                ++ans;
    printf("%d\n",ans);
    return 0;
}
//by zzy
个人工具