zoukankan      html  css  js  c++  java
  • A. 纵情

    A. 纵情

    题目链接:下面的题面有一些问题

    http://10.1.6.216/contest/18/problem/107

    纵情山河万里,肆意九州五月 —— gfhx

    题目背景

    然而题面跟标题并没有任何关系,只是为了告诉你此题的毒瘤出题人是谁。

    题目描述

    最近高一同学都在备战期中考试,新出现了一种题型叫做“保值区间”(怀疑是jjb

    刷存在感,因为有他自己名字,一类题连出三次,切掉不是有手就行?)。鉴于高二学长数学比我们巨,那就麻烦你们现推一下结论叭。

    “保值区间”的定义是这样的:一个函数如果在区间[m,n]

    (m<n)上是单调的,并且值域也是[m,n](m<n),则[m,n]为该函数的保值区间。为了将问题简化,本题是这样的:给定一个关于x的函数f(x)=ax2+bx+c,要求求出该函数在单调递增的区间内是否存在“保值区间”。如果存在,那么输出YES,否则输出NO

    (只输出引号内的内容)。

    输入格式

    第一行一个整数T

    ,表示有T

    组输入输出。

    共有T

    行,三个整数分别代表a,b,c

    ,其含义见题目描述。

    输出格式

    每一行对对应的a,b,c

    输出"YES""NO"

    样例输入输出

    样例输入1

    1
    1 2 3

    样例输出1

    NO

    样例输入2

    10
    9 2 3
    2 7 3
    4 0 4
    3 3 1
    4 0 8
    1 7 0
    5 4 0
    1 4 2
    6 9 0
    1 0 0

    样例输出2

    NO
    NO
    NO
    NO
    NO
    NO
    NO
    YES
    NO
    YES

    (作为毒瘤出题人的我奉上一组不水的样例,看我多有良心,一定要签到哟~~)

    样例解释

    自己手玩去。。。手玩不出来别学数学了(bushi

    数据范围

    对于100

    的数据,T10000001000000000a,b,c1000000000

    作为签到题我并不想给部分分,毕竟暴力也打不出来,一定要有不ACAC即爆0的破釜沉舟的勇气!!!

    题目分析:
    其实这道题还算是挺水的(就是一些毒瘤特判真的是特别多,崩溃qwq)。根据题目我们可以发现,既要在增区间内,又要使定义域与值域相等,这不就是求二次函数和y=x的交点嘛,求出交点,然后判断这个点与对称轴的关系(其实就是判断这个两个点是不是满足在增区间之内),就可以完美(并不)AC这道题。

    但是由于神仙毒瘤出题人的神奇脑洞,我们发现这个题里面是存在一些坑点的:
    1.特判a=0的情况,如果这个时候b=1,c=0,也就是说这个函数是y=x,那么这个函数就存在保值区间,不然的话,其他的一次函数都不存在保值区间

    2.由于输入数据非常大,所以我们一定不可以使用cin cout!特别是不能像我这个憨憨一样用cout<<endl!qwq endl 对于时间复杂度的增加是非常多的!

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    inline ll read()
    {
        ll X=0,w=0; char ch=0;
        while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
        while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
        return w?-X:X;
    }//快读优化
    
    /*unsigned */long long ans;
    ll t,a,b,c,sum1,sum2;
    ll p;
    //这个题long long就可以解决所有事情,而且有负值,所以如果用unsigned long long 并不合适
    
    int main()
    {
    //    scanf("%lld",&t);
            t=read();
        while(t--)
        {
            a=read();b=read();c=read();
            if(a==0)
            {
                if(c==0&&b==1) printf("YES
    ");
                else
                {
                printf("NO
    ");
                }
                
                continue;
            }
            ans=(b-1)*(b-1)-4*a*c;//求根判别式
            if(ans<=0) 
            {
                printf("NO
    ");
                continue;
            }
            else
            {
                sum1=(1-b+sqrt(ans));
                sum2=(1-b-sqrt(ans));
                            //如果除以2a,那么最后有可能出现小数,而long long是下取整,所以有可能导致结果出锅,因此我们不除以2a
            }
            
            p=-b;//同样不除以2a
            if(sum1>=p&&sum2>=p&&a>0) 
            {
                printf("YES
    ");
                continue;
            }
            else if(sum1<=p&&sum2<=p&&a<0)
            {
                printf("YES
    ");
                continue;
            }
                    //判断是不是在增区间之内
        
            printf("NO
    ");    
        }
        
        return 0;
    }                        

    ----------------end-------------------

  • 相关阅读:
    osip状态机分析
    配置tomcat 加载指定的jar
    oracle创建用户并指定表空间
    CentOS7通过rsync+crontab实现两台服务器文件同步
    CentOS7配置MySQL5.7主备
    CentOS7本地安装MySQL5.7
    设置mysql 事务锁超时时间 innodb_lock_wait_timeout
    获取指定年月的第一天与最后一天
    Nginx 反向代理504 Gateway Time-out
    ubuntu下安装配置apache2与php
  • 原文地址:https://www.cnblogs.com/yxr001002/p/14056396.html
Copyright © 2011-2022 走看看