Bamboo之寻找小金刚

分析

可以抽象为许多连续线段,分别计数左拐和右拐的个数。考察叉积的基础应用。

假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角。考虑线段AB和BC形成的向量

sin∠ABC= (AB * BC)/|AB|*|BC|

两个向量的叉乘除以它们的模

所以叉乘可以判断夹角是否大于180°从而确定转向。当然叉积是有方向的,可以自己选择哪条边在前,只要标准统一即可。每三个点组成一组,遍历,分别计数左拐数和右拐数。具体叉积相关操作可以看《算法导论》

注意

常见的一种陷阱是给出的数据范围明确在int范围内,但是计算过程中+-*/尤其是+-,是很可能导致数据暂时超出int范围的,所以建议用long long,或者计算时强制转化为long long

另外观察n的范围1<n,有一组只有两个点的边界情况,此时没有拐点

代码

const int maxx = 1e6 + 5;
struct point{
long long x, y;
}p[maxx];
long long dir(point pi, point pj, point pk)
{
return (pk.x - pi.x)*(pj.y - pi.y) - (pj.x - pi.x)*(pk.y - pi.y);
}
int main()
{
int n, a;
while (~scanf("%d%d", &n, &a))
{
for (int i = 0; i<n; i++)
{
scanf("%lld %lld", &p[i].x, &p[i].y);
}
long long left = 0, right = 0;
long long ans = a, temp;
if (n<3)ans = a;
else{
for (int i = 2; i<n; i++)
{
temp = dir(p[i - 2], p[i - 1], p[i]);
//printf("i=%d,temp =%d\n",i,temp);
if (temp<0){ left++; ans += left; }
else if (temp>0){ right++; ans -= right; }
}
}
printf("%lld\n", ans);
}
}

2016级算法第六次上机-A.Bamboo之寻找小金刚的更多相关文章

  1. 2016级算法第六次上机-E.Bamboo之吃我一拳

    Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...

  2. 2016级算法第六次上机-F.AlvinZH的学霸养成记VI

    1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那 ...

  3. 2016级算法第六次上机-G.ModricWang likes geometry

    1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码

  4. 2016级算法第六次上机-D.AlvinZH的学霸养成记V

    1081 AlvinZH的学霸养成记V 思路 中等题,计算几何. 这是一个排序问题,按极角排序.可以转化为叉积的应用,对于点A和B,通过叉积可以判断角度大小,共线时再判断距离. 叉积的应用.OA × ...

  5. 2016级算法第六次上机-C.AlvinZH的学霸养成记II

    1032 AlvinZH的学霸养成记II 思路 中等题,贪心. 所有课程按照DDL的大小来排序. 维护一个当前时间curTime,初始为0. 遍历课程,curTime加上此课程持续时间d,如果这时cu ...

  6. 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION

    1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...

  7. 2016级算法第五次上机-C.Bamboo和"Coco"

    1064 Bamboo和"Coco" 分析题意 每个亡灵至少一个花瓣,相邻的亡灵中思念值高的要获得的花瓣高(思念值相等是不需要花瓣一样多的).主要考贪心思路,为了使得花瓣总量最少, ...

  8. 2016级算法第五次上机-B.Bamboo&APTX4844魔发药水

    Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能 ...

  9. 2016级算法第四次上机-E.Bamboo and the Ancient Spell

    Bamboo and the Ancient Spell 分析 可能英文读题难度比较大,但是只要看到全大写的 "THE LONGEST COMMON SUBSEQUENCE !"应 ...

随机推荐

  1. send anywhere真的好用啊

    手机和电脑互传文件,方便很多.

  2. Wap版

    Wap版:又叫h5.M版.移动网页版: Mobile:存储wap版调用的接口

  3. abp CrudAppService 自定义分页、排序

    public class GetAllTasksInput : PagedAndSortedResultRequestDto { public TaskState? State { get; set; ...

  4. Spring MyBatis Oracle 多数据源

    数据源1 <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"&g ...

  5. 从Objective-C到Swift,你必须会的(三)init的顺序

    Objective-C的构造函数吧,就最后return一个self.里头你要初始化了什么都可以.在Swift的init函数里把super.init放在前面,然后再初始化你代码里的东西就会报错了. 所以 ...

  6. (转)【经验之谈】Git使用之Windows环境下配置

    原文地址:http://www.cnblogs.com/xishuai/p/3590434.html 前言 安装 配置 关于git使用的几个问题 后记 关于代码托管,以前用过vss和svn,看博客或论 ...

  7. [Selenium With C#基础教程] Lesson-02 Web元素定位

    作者:Surpassme 来源:http://www.jianshu.com/p/cfd4ed1daabd 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 使用Selenium ...

  8. Oracle ERP View - fnd_global.apps_initialize

    在ORACLE APPLICATION FORM中已存储了数据,在客户端TOAD中查找其TABLE找到相关数据行,但当查找其VIEW时就无法找到数据. 原因ORACLE的权责及OU安全机制屏蔽问题. ...

  9. EJB学习手记

    周末两天,看了两天的ejb知识.公司有个转发消息的程序,里面是根据ejb/jms+cdi/event做的,这些之前没接触过. 总而言之,从中学到了很多东西,从ejb到webservice. jboss ...

  10. C# 使用 COALESCE 表达式简化 Null 检查

    下面这个判断 null 的语句: a == null ? b: a 可以用 COALESCE 表达式,简化成: a ?? b