CF 1142C(转化、凸包)

可以变换坐标:x‘ = x, y‘ = y - x ^ 2,如此之后可得线性函数x‘ * b + c = y‘,可以发现两点连边为抛物线,而其他点都在这条线下方才满足题意,故而求一个上凸壳即可。

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <vector>
 6 using namespace std;
 7
 8 typedef long long ll;
 9 const int maxn = 1e5 + 5;
10 int n;
11 struct Point {
12     ll x, y;
13
14     Point(){}
15     Point(ll x, ll y):x(x), y(y) {}
16
17     friend ll operator * (const Point &a, const Point &b) {
18         return a.y * b.x - b.y * a.x;
19     }
20
21     friend Point operator - (const Point &a, const Point &b) {
22         return Point(a.x - b.x, a.y - b.y);
23     }
24
25     bool operator < (const Point &rhs) const {
26         if (x != rhs.x)    return x < rhs.x;
27         return y < rhs.y;
28     }
29 };
30
31 vector<Point> v, st;
32
33 void read() {
34     cin >> n;
35
36     for (int i = 0; i < n; i++) {
37         ll x, y;
38         cin >> x >> y;
39         y = y - x * x;
40         v.push_back({x, y});
41     }
42 }
43
44 void convex() {
45     sort(v.begin(), v.end());//按坐标排序
46
47     for (int i = n - 1; ~i; --i)
48         v[i] = v[i] - v[0];
49
50     for (int i = 0; i < n; i++) {
51         int tot = st.size();
52         while (tot > 1 && (v[i] - st[tot - 2]) * (st[tot - 1] - st[tot - 2]) >= 0)    tot--, st.pop_back();
53         st.push_back(v[i]);
54     }
55 }
56
57 int main() {
58     ios_base::sync_with_stdio(0);
59     cin.tie(0), cout.tie(0);
60
61     read();
62     convex();
63
64     int ans = 0;
65     for (int i = 1; i < st.size(); i++)
66         if (st[i].x != st[i - 1].x)//x相同无法构成二次函数
67             ans++;
68     cout << ans << endl;
69
70     return 0;
71 }

原文地址:https://www.cnblogs.com/AlphaWA/p/10660648.html

时间: 2024-08-12 00:49:25

CF 1142C(转化、凸包)的相关文章

iOS开发之__bridge,__bridge_transfer和__bridge_retained

本文转至:http://www.qingpingshan.com/rjbc/ios/157477.html 引言 Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举该框架支持进行管理的数据以及可提供的服务: 1.群体数据类型 (数组.集合等) 2.程序包 3.字符串管理 4.日期和时间管理 5.原始数据块管理 6.偏好管理 7.URL及数据流操作 8.线程和RunLoop 9.端口和

一场CF的台前幕后(上)——转

前奏 大约4月份的时候,业界毒瘤pyx噔噔噔跑过来说:“酷爱!我YY了一道题!准备当CF的C” 我当时就被吓傻了."Yet another Chinese round?" “区间取模,区间求和” 感觉这题还不错?不过pyx嫌水了…… 好办!当时我刚刚出完动态仙人掌不久,于是一拍脑袋说:把这个问题出到仙人掌上去! 当然被pyx鄙视了…… 后来一直就没啥动静,直到5月底的CTSC. 试机的时候pyx给我看了套他出的神题……里面有一道题……我不小心读成了下面这个样子: “给定n个m维的模2意

ARC下OC对象和CF对象之间的桥接(bridge)

在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下

【BZOJ 1027】 (凸包+floyd求最小环)

[题意] 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的铁铝锡比重为用户所需要的比重. 现在,用户给出了n种他们需要的合金,以及每种合金中铁铝锡的比重.公司希望能够订购最少种类的原材料,并且使用这些原材料可以加工出用户需要的所有种类的合金. [分析] 只要考虑前两个物质的比例,因为加起来等于1. 如果你看过zoj3154,就会知道这题的模型,用二元组表

hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

题目链接 题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性 分析: 类似cf的题目,比赛的时候都没想出来,简直笨到极点..... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <vector> 7 #include &

uva 10065 (凸包+求面积)

链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1006 Problem A Useless Tile Packers Input: standard input Output: standard output Yes, as you have apprehended the Useless Tile Pac

字符编码简介:ASCII,Unicode,UTF-8,GB2312及Unicode和UTF-8如何转化

参考: http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html http://www.cnblogs.com/mjgforever/archive/2008/02/27/1083135.html 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个字节一共可

1、AJAX里面status的值代表什么 2、get post 的区别 3、怎样把对象转化成字符串 4、闭包、继承、原型、原型链 5 、http传输协议 6、arguments是什么

1.AJAX里面status的值代表什么     在JavaScript里面写AJax的时,最关键的一步是对XMLHttpRequest对象建立监听,即使用"onreadystatechange"方法.监听的时候,要对XMLHttpRequest对象的请求状态进行判断,通常是判断readyState的值为4且status的值为200或者304时执行我们需要的操作.以下记录了一些常用readState以及status的值及其含义 readyState 属性表示Ajax请求的当前状态.它的

CF 338E, 线段树

这道题真是太伤节奏了,做完之后好几天没动弹了. 题目大意:给你两个数组a.b,a长b短,对于以a每个位置开头与b等长的连续子序列,我们询问是否有这样一个匹配方式让子序列每个数和b中每个数一一对应相加且和大于给定的常数h. 解:没有想明白,去看官解没弄懂出题人是怎么分块瞎搞的.搜了一下题解,发现有一个更巧妙的解法,首先我们对b排序不会影响到结果,然后对于某个数,他在排序后的b里的合法匹配方案一定是连续的一段,这样就转化成了线段问题.对于Bn(从小到大排序的B数组),我们可知必须子序列里有n个数和他