题意:在一个平面直角坐标系,一个点总是从原点出发,但是每次移动只能移动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. 二进制格式 PLY 模型文件的读取与渲染

    PLY 文件头部信息: ply format binary_little_endian 1.0 comment VCGLIB generated element vertex 13469 proper ...

  2. 3.利用jmeter制作性能脚本

        jmeter录制脚本示例   jmeter手工脚本编写与调试   业务逻辑实现之逻辑控制器   业务脚本参数化实现   jmeter处理cookie   beanshell脚本   ...

  3. java8 stream api流式编程

    java8自带常用的函数式接口 Predicate boolean test(T t) 传入一个参数返回boolean值 Consumer void accept(T t) 传入一个参数,无返回值 F ...

  4. 如果数据库上的row格式是mixed或者mixed的格式,如何对比两台数据库服务器上的数据是否一致呢

    如果数据库上的row格式是mixed或者mixed的格式,如何对比两台数据库服务器上的数据是否一致呢

  5. 到底什么是哈希Hash?

    有次面试被问到这个问题? 我说是经过运算的一串字符串,这个回答显然是让人不满意,连自己都不满意! 但是又对其很模糊,那么到底什么是Hash呢? 定义 Hash一般翻译为散列,还有音译为哈希,本文我们统 ...

  6. 同步alv的前端显示和输出内表中的数据

    在使用CL_GUI_ALV_GRID显示报表的时候,当我们使用了checkbox的时候,或者是有可编辑的字段,当我们 在前段修改了单元格内容的时候,后台的内表并不会自动的更新,此时需要我们调用一个方法 ...

  7. [java]文件上传下载删除与图片预览

    图片预览 @GetMapping("/image") @ResponseBody public Result image(@RequestParam("imageName ...

  8. 《进击吧!Blazor!》第一章 2.Hello Blazor

    第二次写专栏,开头还是不知道说什么,所以--先来段广告<进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发 ...

  9. 两节锂电池充电芯片,和保护IC的接法

    1.两节锂电池的充电电路:可以分为三种方式. 第一种,USB口的5V输入,使用一颗SOT23-6的升压IC,直接升压到8.4V.电流在1A以下.优点是成本最低,缺点是,没有锂电池充电控制逻辑,和锂电池 ...

  10. kaggle新手如何在平台学习大神的代码

    原创:数据臭皮匠  [导读]Kaggle ,作为听说它很牛X但从未接触过的同学,可能仅仅了解这是一个参加数据挖掘比赛的网站,殊不知Kaggle也会有赛题相关的数据集, 比如我们熟知的房价预测.泰坦尼克 ...