2016级算法第六次上机-A.Bamboo之寻找小金刚
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之寻找小金刚的更多相关文章
- 2016级算法第六次上机-E.Bamboo之吃我一拳
Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...
- 2016级算法第六次上机-F.AlvinZH的学霸养成记VI
1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那 ...
- 2016级算法第六次上机-G.ModricWang likes geometry
1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码
- 2016级算法第六次上机-D.AlvinZH的学霸养成记V
1081 AlvinZH的学霸养成记V 思路 中等题,计算几何. 这是一个排序问题,按极角排序.可以转化为叉积的应用,对于点A和B,通过叉积可以判断角度大小,共线时再判断距离. 叉积的应用.OA × ...
- 2016级算法第六次上机-C.AlvinZH的学霸养成记II
1032 AlvinZH的学霸养成记II 思路 中等题,贪心. 所有课程按照DDL的大小来排序. 维护一个当前时间curTime,初始为0. 遍历课程,curTime加上此课程持续时间d,如果这时cu ...
- 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION
1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...
- 2016级算法第五次上机-C.Bamboo和"Coco"
1064 Bamboo和"Coco" 分析题意 每个亡灵至少一个花瓣,相邻的亡灵中思念值高的要获得的花瓣高(思念值相等是不需要花瓣一样多的).主要考贪心思路,为了使得花瓣总量最少, ...
- 2016级算法第五次上机-B.Bamboo&APTX4844魔发药水
Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能 ...
- 2016级算法第四次上机-E.Bamboo and the Ancient Spell
Bamboo and the Ancient Spell 分析 可能英文读题难度比较大,但是只要看到全大写的 "THE LONGEST COMMON SUBSEQUENCE !"应 ...
随机推荐
- send anywhere真的好用啊
手机和电脑互传文件,方便很多.
- Wap版
Wap版:又叫h5.M版.移动网页版: Mobile:存储wap版调用的接口
- abp CrudAppService 自定义分页、排序
public class GetAllTasksInput : PagedAndSortedResultRequestDto { public TaskState? State { get; set; ...
- Spring MyBatis Oracle 多数据源
数据源1 <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"&g ...
- 从Objective-C到Swift,你必须会的(三)init的顺序
Objective-C的构造函数吧,就最后return一个self.里头你要初始化了什么都可以.在Swift的init函数里把super.init放在前面,然后再初始化你代码里的东西就会报错了. 所以 ...
- (转)【经验之谈】Git使用之Windows环境下配置
原文地址:http://www.cnblogs.com/xishuai/p/3590434.html 前言 安装 配置 关于git使用的几个问题 后记 关于代码托管,以前用过vss和svn,看博客或论 ...
- [Selenium With C#基础教程] Lesson-02 Web元素定位
作者:Surpassme 来源:http://www.jianshu.com/p/cfd4ed1daabd 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 使用Selenium ...
- Oracle ERP View - fnd_global.apps_initialize
在ORACLE APPLICATION FORM中已存储了数据,在客户端TOAD中查找其TABLE找到相关数据行,但当查找其VIEW时就无法找到数据. 原因ORACLE的权责及OU安全机制屏蔽问题. ...
- EJB学习手记
周末两天,看了两天的ejb知识.公司有个转发消息的程序,里面是根据ejb/jms+cdi/event做的,这些之前没接触过. 总而言之,从中学到了很多东西,从ejb到webservice. jboss ...
- C# 使用 COALESCE 表达式简化 Null 检查
下面这个判断 null 的语句: a == null ? b: a 可以用 COALESCE 表达式,简化成: a ?? b