团体程序设计天梯赛-L3-009 长城

Posted cmyg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了团体程序设计天梯赛-L3-009 长城相关的知识,希望对你有一定的参考价值。

https://pintia.cn/problem-sets/994805046380707840/problems/994805050277216256

 

题目限制:烽火台只能向左看。

当新加入的点导致下凸,则栈顶的点一定要选择。

 技术分享图片

 

 

技术分享图片

 

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <time.h>
 6 #include <string>
 7 #include <set>
 8 #include <map>
 9 #include <list>
10 #include <stack>
11 #include <queue>
12 #include <vector>
13 #include <bitset>
14 #include <ext/rope>
15 #include <algorithm>
16 #include <iostream>
17 using namespace std;
18 #define ll long long
19 #define minv 1e-6
20 #define inf 1e9
21 #define pi 3.1415926536
22 #define nl 2.7182818284
23 const ll mod=1e9+7;//998244353
24 const int maxn=1e5+10;
25 
26 ll x[maxn],y[maxn],z[maxn];
27 bool vis[maxn]={0};
28 
29 ll cross(ll x1,ll y1,ll x2,ll y2)
30 {
31     return x1*y2-x2*y1;
32 }
33 
34 int main()
35 {
36     int n,d,i,sum=0;
37     ll xx,yy;
38     scanf("%d",&n);
39     d=0;
40     for (i=1;i<=n;i++)
41     {
42         scanf("%lld%lld",&xx,&yy);
43         while (d>1 && cross(x[d-1]-x[d],y[d-1]-y[d],x[d]-xx,y[d]-yy)<=0)
44             d--;
45         if (i>=3)
46             vis[z[d]]=1;
47         d++;
48         x[d]=xx,y[d]=yy,z[d]=i;
49     }
50     for (i=2;i<=n;i++)
51         sum+=vis[i];
52     cout<<sum;
53     return 0;
54 }
55 /*
56 3
57 2 1
58 1 0
59 0 1
60 
61 5
62 5 0
63 4 0
64 3 0
65 2 0
66 1 0
67 */

 

以上是关于团体程序设计天梯赛-L3-009 长城的主要内容,如果未能解决你的问题,请参考以下文章

2023年团体程序设计天梯赛 题解

团体程序设计天梯赛L3-019 代码编排(23分)

2016年 团体程序设计天梯赛 - 模拟赛

团体程序设计天梯赛-练习集L2-007 家庭房产

团体程序设计天梯赛-练习集L2-006 树的遍历

团体程序设计天梯赛-练习集