POJ 1654
来源:互联网 发布:nginx 静态服务器缓存 编辑:程序博客网 时间:2024/05/17 01:11
这题目一开始就没有看懂,后来比赛结束后,看别人的报告,才知道什么意思,
:在一个矩阵上面,一开始位于原点,现在你可以往8个方向走,每次走1个单位(上下左右)或者根号2个单位(其他四个方向)。现在给你每次走的方向,(保证最后回到原点)。问你做过的边多围成的多边形的面积是多少。1:西南 2:南 3:东南 4:西 5: 不走 6: 东 7:西北 8:北 9:东北
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int maxn=1000005;
char c[maxn];
struct node
{
double x;
double y;
};
double area(node p0,node p1,node p2)//三角形面积,利用叉乘来算
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int main()
{
int t,k;
long long ans;//必须用 long long
node p0,p1,p2;
scanf("%d",&t);
while(t--)
{
p0.x=0;
p0.y=0;
p1=p0;
p2=p0;
ans=0;
memset(c,0,sizeof(c));
scanf("%s",c);
int len=strlen(c);
for(int i=0; i<len; i++)
{
k=c[i]-'0';
switch(k)
{
case 1:
p2.x=p1.x-1;
p2.y=p1.y-1;
break;
case 2:
p2.x=p1.x;
p2.y=p1.y-1;
break;
case 3:
p2.x=p1.x+1;
p2.y=p1.y-1;
break;
case 4:
p2.x=p1.x-1;
p2.y=p1.y;
break;
case 5:
p2.x=p1.x;
p2.y=p1.y;
break;
case 6:
p2.x=p1.x+1;
p2.y=p1.y;
break;
case 7:
p2.x=p1.x-1;
p2.y=p1.y+1;
break;
case 8:
p2.x=p1.x;
p2.y=p1.y+1;
break;
case 9:
p2.x=p1.x+1;
p2.y=p1.y+1;
break;
}
ans+=area(p0,p1,p2);
p1=p2;
}
if(ans<0)
ans=0-ans;
if(ans&1)
{
cout<<ans/2<<".5"<<endl;
}
else
{
cout<<ans/2<<endl;
}
}
return 0;
}
- poj 1654
- POJ 1654
- poj 1654
- poj 1654
- POJ 1654
- poj 1654
- poj 1654
- poj 1654 Area
- POJ 1654 Area
- POJ 1654 Area
- poj 1654 Area
- POJ 1654 Area
- poj 1654Area
- poj 1654 Area
- POJ 1654 多边形面积
- POJ 1654 Area
- POJ 1654 Area
- poj 1654 Area
- 如何解决Java.lang.NoClassDefFoundError
- strage pattern(2)
- 深入分析Sleep(0)与Sleep(1)的区别
- Oracle 12c 进程表
- Java设计模式研究之Flyweight模式
- POJ 1654
- DataView.RowFilter的使用(包括in,like等SQL中的操作符)
- FAT文件系统的挂载过程
- wordpress调用函数大全
- sql将列显示为行
- HDU 2600 War
- MSM8x25 LCD调试分析(二)
- STM32之DMA简介
- Android应用开发学习笔记之启动另外一个Activity