• 最小函数值(minval)


    最小函数值(minval)

    链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1370
    时间限制: 1000 ms         内存限制: 65536 KB

    【题目描述】

    有n个函数,分别为F1,F2,...,FnF1,F2,...,Fn。定义Fi(x)=Aix2+Bix+Ci(xN)Fi(x)=Aix2+Bix+Ci(x∈N∗)。给定这些AiBiAi、Bi和CiCi,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。

    【输入】

    第一行输入两个正整数n和m。

    以下n行每行三个正整数,其中第i行的三个数分别位AiAi、BiBi和CiCi。输入数据保证Ai<=10Bi<=100Ci<=10000Ai<=10,Bi<=100,Ci<=10000。

    【输出】

    将这n个函数所有可以生成的函数值排序后的前m个元素。这m个数应该输出到一行,用空格隔开。

     

    【输入样例】

    3 10
    4 5 3
    3 4 5
    1 7 1

    【输出样例】

    9 12 12 19 25 29 31 44 45 54

    【提示】

    【数据规模】

    n,m<=10000

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<vector>
    #include <algorithm>
    using namespace std;
    const int maxn = 10005;
    int A[maxn],B[maxn],C[maxn],x[maxn],y[maxn];
    int n,m;
    int js(int A,int B,int C,int X)
    {
        return A*X*X+B*X+C;
    }
    int main()
    {
    
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&A[i],&B[i],&C[i]);
            x[i]=max((B[i]+1)/((-2)*A[i]),1);
            y[i]=js(A[i],B[i],C[i],x[i]);
        }
        int j=0,flag=0;
        y[0]=210000005;
        while(j<m)
        {
            int k=0;
            for(int i=1;i<=n;i++)
                if(y[i]<y[k])k=i;
            if(flag)printf(" %d",y[k]);
            else{flag=1;printf("%d",y[k]);}        
            y[k]=js(A[k],B[k],C[k],++x[k]);
            j++;
        }    
        return 0;
    }
  • 相关阅读:
    802.11标准及无线网运行模式
    linux中top命令使用及查看tcp连接
    DNS信息收集命令nslookup
    Openvas安装
    nc高级应用
    poj 1411 Calling Extraterrestrial Intelligence Again(超时)
    poj 1046 Color Me Less
    1215 迷宫
    2666 Accept Ratio(打表AC)
    2021 中庸之道
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7966274.html
Copyright © 2020-2023  润新知