POJ 1654 Area(计算几何)
2015-09-03 08:22
316 查看
Description
一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。给出一串包含1-9的字符串,问你这些点所围成的面积
Input
第一行为用例组数t,之后t行每行一个由1~9组成的字符串
Output
输出这些点所围成的面积
Sample Input
4
5
825
6725
6244865
Sample Output
0
0
0.5
2
Solution
向量叉乘求面积
Code
一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。给出一串包含1-9的字符串,问你这些点所围成的面积
Input
第一行为用例组数t,之后t行每行一个由1~9组成的字符串
Output
输出这些点所围成的面积
Sample Input
4
5
825
6725
6244865
Sample Output
0
0
0.5
2
Solution
向量叉乘求面积
Code
#include<cstdio> #include<cstring> #include<iostream> using namespace std; typedef long long ll; int dx[]={0,1,1,1,0,0,0,-1,-1,-1}; int dy[]={0,-1,0,1,-1,0,1,-1,0,1}; int main() { int t; scanf("%d",&t); while(t--) { char s[1111111]; scanf("%s",s); int len=strlen(s); if(len<3) { printf("0\n"); continue; } ll area=0,x=0,y=0,px,py; for(int i=0;i<len;i++) { px=x+dx[s[i]-'0']; py=y+dy[s[i]-'0']; area+=(px*y-py*x); x=px; y=py; } if(area<0)area=-area; if(area%2==0) printf("%lld\n",area/2); else printf("%lld.5\n",area/2); } return 0; }
相关文章推荐
- c++ primer读书笔记之c++11(二)
- Java简易计算器
- 150903_工具_eclipse_res文件夹
- 机房管理系列(1) 联想保护系统EDU7.5在同传CMOS参数后奔溃的解决办法
- Google如何欺骗用户分享地理位置信息
- Oracle数据泵导入导出案例
- AI (Adobe Illustrator)详细用法(一)
- HDU 5308 I Wanna Become A 24-Point Master(模拟+数论)
- hdu 1176 免费馅饼(数塔类型)
- 已解——navicat premium 连接oracle 11g,出现no listener提示
- Java集合
- linux系统启动流程
- MOOC数据结构-01-复杂度1 最大子列和问题 (20分)
- LFS过程问题解决
- #用Python直接写UTF-8文本文件
- CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
- php 性能优化 笔记
- JavaSE---IO流基础(异常、File类、递归)
- CentOS下SVN安装及配置图解教程
- 【IMPDP】使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查