hi.函数零点

文章讨论了如何使用零点存在定理分析一个连续函数的零点情况,通过给定函数在特定范围内的值,确定至少有多少个零点。样例展示了如何运用这个定理解决实际问题。
摘要由CSDN通过智能技术生成

[语言月赛 202312] 函数零点

题目描述

小 F 在做梦时得到了一个神秘函数 ϕ ( x ) \phi(x) ϕ(x),这是一个连续函数。

零点 x = x 0 x=x_0 x=x0 是一系列特殊的数,使得 ϕ ( x 0 ) = 0 \phi(x_0)=0 ϕ(x0)=0,很可惜的是, ϕ ( x ) \phi(x) ϕ(x) 函数相当复杂,无法精确计算其零点。

零点存在定理

ϕ ( a ) ⋅ ϕ ( b ) < 0 \phi(a)\cdot \phi(b)<0 ϕ(a)ϕ(b)<0,则在区间 ( a , b ) (a,b) (a,b) 内,函数 ϕ ( x ) \phi(x) ϕ(x) 至少存在一个零点。

小 F 计算了 0 ∼ N 0 \sim N 0N 范围内,每个整数 w w w 的函数值 ϕ ( w ) \phi(w) ϕ(w),请问,运用零点存在定理,可以确定在 ( 0 , N ) (0,N) (0,N) 范围内,函数 ϕ ( x ) \phi(x) ϕ(x) 至少有多少零点?

输入格式

输入共两行。

输入的第一行为一个整数 N N N

输入的第二行为 N + 1 N+1 N+1 个整数,依次代表 ϕ ( 0 ) , ϕ ( 1 ) , ⋯   , ϕ ( N ) \phi(0),\phi(1),\cdots,\phi(N) ϕ(0),ϕ(1),,ϕ(N)

保证第二行中所有数据不为 0 0 0

输出格式

输出一行一个整数,代表在 ( 0 , N ) (0,N) (0,N) 上, ϕ ( x ) \phi(x) ϕ(x) 至少有多少个零点。

样例 #1

样例输入 #1

5
-2 1 3 -2 1 2

样例输出 #1

3

提示说明

样例 1 说明

ϕ ( 0 ) = − 2 , ϕ ( 1 ) = 1 , ϕ ( 2 ) = 3 , ϕ ( 3 ) = − 2 , ϕ ( 4 ) = 1 , ϕ ( 5 ) = 2 \phi(0)=-2,\phi(1)=1,\phi(2)=3,\phi(3)=-2,\phi(4)=1,\phi(5)=2 ϕ(0)=2,ϕ(1)=1,ϕ(2)=3,ϕ(3)=2,ϕ(4)=1,ϕ(5)=2。在 ( 0 , 1 ) (0,1) (0,1) ( 2 , 3 ) (2,3) (2,3) ( 3 , 4 ) (3,4) (3,4) 上各至少有一个零点。

  • ϕ ( 0 ) × ϕ ( 1 ) = − 2 < 0 \phi(0) \times \phi(1) = -2 < 0 ϕ(0)×ϕ(1)=2<0,按照零点存在定理,在 0 < x < 1 0 < x < 1 0<x<1 的区域一定会有至少一个零点。
  • ϕ ( 1 ) × ϕ ( 2 ) = 3 > 0 \phi(1) \times \phi(2) = 3 > 0 ϕ(1)×ϕ(2)=3>0,无法保证在 1 < x < 2 1 < x < 2 1<x<2 的区域存在零点。
  • ϕ ( 2 ) × ϕ ( 3 ) = − 6 < 0 \phi(2) \times \phi(3) = -6 < 0 ϕ(2)×ϕ(3)=6<0,按照零点存在定理,在 2 < x < 3 2 < x < 3 2<x<3 的区域一定会有至少一个零点。
  • ϕ ( 3 ) × ϕ ( 4 ) = − 2 < 0 \phi(3) \times \phi(4) = -2 < 0 ϕ(3)×ϕ(4)=2<0,按照零点存在定理,在 3 < x < 4 3 < x < 4 3<x<4 的区域一定会有至少一个零点。
  • ϕ ( 4 ) × ϕ ( 5 ) = 2 > 0 \phi(4) \times \phi(5) = 2 > 0 ϕ(4)×ϕ(5)=2>0,无法保证在 4 < x < 5 4 < x < 5 4<x<5 的区域存在零点。

故至少能保证有 3 3 3 个零点。

数据规模与约定

  • 对于 30 % 30\% 30% 的测试数据, 1 ≤ N ≤ 5000 1 \le N \le 5000 1N5000 ϕ ( i ) ∈ { − 1 , 1 } \phi(i) \in \{-1, 1\} ϕ(i){1,1}
  • 对于 100 % 100\% 100% 的测试数据, 1 ≤ N ≤ 1 0 5 1 \le N \le 10^5 1N105 0 < ∣ ϕ ( i ) ∣ ≤ 1 0 9 0<|\phi(i)|\le10^9 0<ϕ(i)109

代码内容

// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll N=1e5+10;
ll a[N];

int main()
{
    ll n;
    cin>>n;

    ll ans=0;
    for(ll i=0;i<=n;i++)
    {
        cin>>a[i];
        if(i)
        {
            ll res=a[i]*a[i-1];
            if(res<0) ans++;
        }
    }

    cout<<ans<<endl;
    return 0;
}

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值