P2085 最小函数值
题目描述
有 nnn 个函数,分别为 F1,F2,…,FnF_1,F_2,\dots,F_nF1,F2,…,Fn。定义 Fi(x)=Aix2+Bix+Ci(x∈N∗)F_i(x)=A_ix^2+B_ix+C_i(x\in\mathbb N*)Fi(x)=Aix2+Bix+Ci(x∈N∗)。给定这些 AiA_iAi、BiB_iBi 和 CiC_iCi,请求出所有函数的所有函数值中最小的 mmm 个(如有重复的要输出多个)。
输入格式
第一行输入两个正整数 nnn 和 mmm。
以下 nnn 行每行三个正整数,其中第 iii 行的三个数分别为 AiA_iAi、BiB_iBi 和 CiC_iCi。
输出格式
输出将这 nnn 个函数所有可以生成的函数值排序后的前 mmm 个元素。这 mmm 个数应该输出到一行,用空格隔开。
输入输出样例 #1
输入 #1
3 10
4 5 3
3 4 5
1 7 1
输出 #1
9 12 12 19 25 29 31 44 45 54
说明/提示
数据规模与约定
对于全部的测试点,保证 1≤n,m≤100001 \leq n,m\le100001≤n,m≤10000,1≤Ai≤10,Bi≤100,Ci≤1041 \leq A_i\le10,B_i\le100,C_i\le10^41≤Ai≤10,Bi≤100,Ci≤104。
C++实现
#include <iostream>
using namespace std;
int main()
{
int n,m,i,j,cmin,jmin;
int A[10010], B[10010], C[10010];
int F[10010];
cin>>n>>m;
for(i=0;i<n;i++)
{
cin>>A[i]>>B[i]>>C[i];
F[i]=1;
}
for(i=0;i<m;i++)
{
cmin=100000000;
for(j=0;j<n;j++)
{
if(A[j]*F[j]*F[j]+B[j]*F[j]+C[j]<cmin)
{
cmin=A[j]*F[j]*F[j]+B[j]*F[j]+C[j];
jmin=j;
}
}
cout<<A[jmin]*F[jmin]*F[jmin]+B[jmin]*F[jmin]+C[jmin]<<' ';
F[jmin]++;
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容