| ||||||||||
| 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 | |||||||||
POJ 哥愤了。。。。ZOJ2499 题目一样 就是数据范围变大一点
我除了把数组范围调到相应值以外 其它都没动
270ms过了
而且ZOJ的限制时间是2S POJ是5S
POJ你这不是坑爹么 我现在在POJ三次超时 还不知道怎么办
代码贴出来 跪求大牛赐教
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int x;
int y;
}s[200010];//ZOJ的数据范围是20W
bool cmpa(node a,node b)
{
if(a.x!=b.x)
return a.x<b.x;
else
return a.y<b.y;
}
bool cmpb(node a,node b)
{
if(a.y!=b.y)
return a.y<b.y;
else
return a.x<b.x;
}
int coua(int k,int n)
{
int sum=0,i;
for(i=1;i<=k;i++)
{
if(s[i].x!=s[i-1].x)
{
sum+=(s[i].x-s[i-1].x-1);
if(s[i].y>2)
sum++;
if(n-s[i-1].y>=2)
sum++;
}
else
{
if(s[i].y-s[i-1].y>2)
sum++;
}
}
return sum;
}
int coub(int k,int m)
{
int sum=0,i;
for(i=1;i<=k;i++)
{
if(s[i].y!=s[i-1].y)
{
sum+=(s[i].y-s[i-1].y-1);
if(s[i].x>2)
sum++;
if(m-s[i-1].x>=2)
sum++;
}
else
{
if(s[i].x-s[i-1].x>2)
sum++;
}
}
return sum;
}
int main()
{
int t,m,n,k;
int i,sum;
cin>>t;
while(t--)
{
cin>>m>>n>>k;
for(i=1;i<=k;i++)
cin>>s[i].x>>s[i].y;
sum=0;
if(n>=2)
{
s[0].x=1;
s[0].y=0;
s[k+1].x=m+1;
s[k+1].y=0;
sort(s+1,s+k+1,cmpa);
sum+=coua(k+1,n);
}
if(m>=2)
{
s[0].x=0;
s[0].y=1;
s[k+1].x=0;
s[k+1].y=n+1;
sort(s+1,s+k+1,cmpb);
sum+=coub(k+1,m);
}
cout<<sum<<endl;
}
return 0;
}
/*
1
5 5 6
1 5
2 3
2 4
4 2
4 3
5 1
*/
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator