「题解」多段线(polyline)

多段线(polyline)

【题目描述】

题面

【输入格式】

从文件polyline . in中读入数据。
输入第一行包含一个正整数 ,表示函数个数。
接下来n 行 , 每行包含两个正整数ki , bi,表示第i个函数的参数。

【输出格式】

输出到文件portal . out中。
输出一行一个正整数,表示形成的多段线的图像中不等于180度角的个数

【样例 输入】

1
1
1 0

【样例 输出】

1
1

【样例 输入】

3
-2 -4
1 7
-5 1

【样例 输出】

3

【提示】

函数相关参见高中数学必修 。(看了也没用)
请认真阅读【数据规模及约定】。

【数据规模及约定】

保证对于所有数据有:

本题评测时将开启 O2 优化。

注意,本题中函数<=180度的角就是函数的拐点,也就是说,就是让你求函数的拐点

那么,我们来研究下样例:

对于样例一就很明显了,我们就研究下最后一个样例

我们看下图像:

图像

现在,我们计算一下s(x)的值

s(x)

这就是s(x)的值.明显的,这个函数有3个拐点(一个在x=7的地方,不容易看出来)

我们就来研究一下这几个函数的关系:

all

上图就显示了所有函数.

我们可以计算这些函数的零点(与x轴交点)来判断有多少个拐点

各个分函数不同的零点数就是总函数的拐点数

思路明白了,代码就好写了

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

typedef long double lb;

const int MAXN = 100000 + 5;

// 文件锁
#define LOCK

int number, cnt=0;
std::vector<int> Data_k;
std::vector<int> Data_b;
lb withx[MAXN];

void init(){
    scanf("%d", &number);
    for(int i = 1; i <= number; i++){
        int ki, bi;
        scanf("%d %d", &ki, &bi);
        if(ki != 0){
            cnt++;
            Data_k.push_back(ki); Data_b.push_back(bi);
            //求出与函数零点
            withx[cnt] = -(lb)Data_b[cnt] / (lb)Data_k[cnt];
        }
    }
}

int main(int argc, char const *argv[]) {
    // 文件
#ifdef LOCK
    freopen ("polyline.in" , "r", stdin );
    freopen ("polyline.out", "w", stdout);
#endif

    init();

    //去重
    std::sort(withx + 1,withx + 1 + number);
    int Answer = cnt;
    for(int i = 1; i <= cnt; i++)
        if(withx[i] - withx[i - 1] <= 1e-18) Answer--;

    printf("%d", Answer);
    return 0;
}
// Wonderful end

最后给下函数解析式

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务