本以为是个大水题,贴个模版就了事了,没想到MLE,的确不能眼高手低
这个题目的memory卡的比较紧,先是MLE,后来是TLE,后来是WA。。。。各种可能的错误都有了,不过感觉除了MLE不是我的问题,
用get输入不知道为什么TLE,然后后GCC提交是WA,最后改为g++才是AC,是int64所致?
回到正题,贴个求多边形面积的连接http://zhidao.baidu.com/question/34974852.html
代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define eps 1e-8
#define zero(x) (((x)>0?(x):-(x))<eps)
typedef struct{__int64 x,y;}point;
typedef struct{point a,b;}line;
int n;
char string[1000005];
inline __int64 xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
void graham_scan();
int main()
{
int t,i;
point now,s,last;
char c;
__int64 are;
s.x=s.y=0;
for(scanf("%d",&t);t;t--)
{
scanf("%s",string);
i=0;
are=0;
now.x=now.y=0;
while(string[i]!='5')
{
last=now;
c=string[i];
if(c=='8') now.y++;
else if(c=='2') now.y--;
else if(c=='4') now.x--;
else if(c=='6') now.x++;
else if(c=='7')
{
now.y++;
now.x--;
}
else if(c=='9')
{
now.y++;
now.x++;
}
else if(c=='1')
{
now.x--;
now.y--;
}
else if(c=='3')
{
now.x++;
now.y--;
}
are+=xmult(s,last,now);
i++;
}
if(are<0) are=-are;
printf("%I64d",are/2);
if(are&1) printf(".5");
printf("\n");
}
return 0;
}