题意:在一个平面直角坐标系,一个点总是从原点出发,但是每次移动只能移动8个方向的中的一个并且每次移动距离
只有1和√2这两种情况,最后一定会回到原点(以字母5结束),请你计算这个点所画出图形的面积

题解:

叉积又叫向量积,如下图

设AC这条边为向量a,AB这条边为向量b,夹角为

那么会有:

那么一个多边形肯定是可以分解成多个三角形的,把它们的面积加到一起就行了

我们知道三角形的角度不是那么容易就可以求出来的,而且通过向量坐标也可以求向量积的模(下面给出三维模式下的)

二位模式下:

向量a=(x1,y1),向量b=(x2,y2)

(向量a*向量b)的模=x1*y2-x2*y1

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<vector>
7 #include<queue>
8 #include<stack>
9 #include<map>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1e6+10;
13 const int INF=0x3f3f3f3f;
14 const double eps=1e-8;
15 const double PI=3.1415926;
16 const int mod = 1e9+7;
17 #define mt(A,B) memset(A,B,sizeof(A))
18 #define lson l,m,rt*2
19 #define rson m+1,r,rt*2+1
20 #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
21 #define zero(x) (((x)>0?(x):-(x))<eps)
22 int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};//8个方向
23 char str[maxn];
24 int main()
25 {
26 int T;
27 int n,m,i,j;
28 int x,y,u,v;
29 long long A;
30 cin>>T;
31 while(T--)
32 {
33 cin>>str;
34 n=strlen(str);
35 x=0;
36 y=0;
37 A=0;
38 for(i=0;i<(n-1);i++)
39 {
40 if(str[i]=='8')
41 {
42 u=x+dir[0][0];
43 v=y+dir[0][1];
44 }
45 else if(str[i]=='2')
46 {
47 u=x+dir[1][0];
48 v=y+dir[1][1];
49 }
50 else if(str[i]=='6')
51 {
52 u=x+dir[2][0];
53 v=y+dir[2][1];
54 }
55 else if(str[i]=='4')
56 {
57 u=x+dir[3][0];
58 v=y+dir[3][1];
59 }
60 else if(str[i]=='9')
61 {
62 u=x+dir[4][0];
63 v=y+dir[4][1];
64 }
65 else if(str[i]=='7')
66 {
67 u=x+dir[5][0];
68 v=y+dir[5][1];
69 }
70 else if(str[i]=='3')
71 {
72 u=x+dir[6][0];
73 v=y+dir[6][1];
74 }
75 else if(str[i]=='1')
76 {
77 u=x+dir[7][0];
78 v=y+dir[7][1];
79 }
80 A+=(u*y)-(v*x);//(u,v),(x,y)和(0,0)原点的叉积算出三角形的面积
81 x=u;
82 y=v;
83 }
84 if(A<0)//顺时针计算是负值
85 A=-A;
86 if(A%2==0)//如果面积可以整除2那么不会有精度缺失
87 cout<<A/2<<endl;
88 else//否则要加上0.5
89 cout<<A/2<<".5"<<endl;
90 }
91 return 0;
92 }

POJ - 1654 利用叉积求三角形面积 去 间接求多边形面积的更多相关文章

  1. poj 1654(利用叉积求面积)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17937   Accepted: 4957 Description ...

  2. hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)

    Area Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 多边形面积(Area_Of_Polygons)

    原理: 任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 分析: 由于给出的点是相对于我们的坐标原点的坐标,每个点实际上我们可以当作一个顶点相对于原点的向量,如下图所示 ...

  4. poj 1654:Area 区域 ---- 叉积(求多边形面积)

    Area   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19398   Accepted: 5311 利用叉积求多边形面 ...

  5. poj 1654 Area(计算几何--叉积求多边形面积)

    一个简单的用叉积求任意多边形面积的题,并不难,但我却错了很多次,double的数据应该是要转化为long long,我转成了int...这里为了节省内存尽量不开数组,直接计算,我MLE了一发...,最 ...

  6. POJ 2954 /// 皮克定理+叉积求三角形面积

    题目大意: 给定三角形的三点坐标 判断在其内部包含多少个整点 题解及讲解 皮克定理 多边形面积s = 其内部整点in + 其边上整点li / 2 - 1 那么求内部整点就是 in = s + 1 - ...

  7. hdu 4709:Herding(叉积求三角形面积+枚举)

    Herding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. Area - POJ 1654(求多边形面积)

    题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的, ...

  9. poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】

    题目:http://poj.org/problem?id=1265 Sample Input 2 4 1 0 0 1 -1 0 0 -1 7 5 0 1 3 -2 2 -1 0 0 -3 -3 1 0 ...

随机推荐

  1. 计算机科学: 寄存器&内存

    参考: [十分钟速成课:计算机科学]6.寄存器&内存 要想聊寄存器Latch,首先要聊内存.什么是内存? Memory,就是储存信息的东西. 我们都玩过单机游戏,如果突然关机,游戏结束但是没有 ...

  2. 【Oracle】regexp_substr()函数详解

    环境:Oracle10.2.0.5 在SQL中尝试使用正则 可以试下regexp_substr()来进行分割 首先创建一个实验视图: SQL> create or replace view te ...

  3. oracle可传输表空间测试

    使用RMAN在恢复表空间的时候,表空间数据文件DBID和恢复数据库的数据文件DBID必须相同 可传输表空间不需要这样,也就是可以快速的把这个表空间插入另一个数据库使用 可传输表空间内的对象必须不依赖与 ...

  4. uni-app开发经验分享九: 组件传值

    一.父组件向子组件传值 通过props来实现,子组件通过props来接收父组件传过来的值! 1.逻辑梳理 父组件中: 第一步:引入子组件: import sonShow from '../../com ...

  5. Navicat 创建mysql存过、定时执行存过

    创建存过: 使用Navicat for MySQL工具创建存储过程步骤: 1. 新建函数(选择函数标签 -> 点击新建函数): 2.输入函数的参数个数.参数名.参数类型等: 3.编写存储过程: ...

  6. RabbitMq消费者在初始配置之后进行数据消费

    RabbitMq消费者在初始配置之后进行数据消费 问题背景 在写一个消费rabbitmq消息的程序是,发现了一个问题,消费者的业务逻辑里面依赖这一些配置信息,但是当项目启动时,如果队列里面有积压数据的 ...

  7. testng学习笔记-- beforesuit和aftersuit

    一.定义 测试套件,主要关注执行顺序 套件:suit可以包含多个class 二.代码标签 三.运行结果

  8. Qedis实现

    对比redis的Qedis 实现在github 和 实验楼都有资料

  9. LOJ10138

    ZJOI 2008 树上的统计 一树上有 n 个节点,编号分别为 1 到 n,每个节点都有一个权值 w.我们将以下面的形式来要求你对这棵树完成一些操作: CHANGE u t :把节点 u 权值改为t ...

  10. 利用Javascript制作网页特效(窗口特效)

    全屏显示窗口 利用fullscreen=yes可以制作全屏显示窗口. ①:在body标签内输入以下代码: <div align="center"> <input ...