标签:event def efi epp ++ 数据 range 个数 hid
有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。
输入格式:
输入数据:第一行输入两个正整数n和m。以下n行每行三个正整数,其中第i行的三个数分别位Ai、Bi和Ci。Ai<=10,Bi<=100,Ci<=10 000。
输出格式:
输出数据:输出将这n个函数所有可以生成的函数值排序后的前m个元素。这m个数应该输出到一行,用空格隔开。
数据规模:n,m<=10000
和上一题序列合并类似 用了类贪心思想 很重要!
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define pb push_back #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define inf 0x3f3f3f3f const int N=100000+5; int a[N]; int b[N]; int heap[N]; int from[N]; int now[N]; struct node { int a,b,c; int now; int v; bool operator< (const node & b)const { return v>b.v; } }s[N]; int main() { priority_queue<node>q; int n,m; RII(n,m); rep(i,1,n) RIII(s[i].a,s[i].b,s[i].c),s[i].now=0; rep(i,1,n) { s[i].now++; int x=s[i].now; s[i].v=s[i].a*x*x+s[i].b*x+s[i].c; q.push(s[i]); } int cnt=1; node head; int last; while(cnt<=m) { head=q.top();q.pop(); printf("%d ",head.v); int x=++head.now; head.v=( head.a*x*x+head.b*x+head.c); q.push(head); cnt++; } return 0; }
标签:event def efi epp ++ 数据 range 个数 hid
原文地址:https://www.cnblogs.com/bxd123/p/10804445.html