#include<bits/stdc++.h> #define debu using namespace std; const int maxn=1010; char st[10]; struct point { int id,t; point(int a=0,int b=0):id(a),t(b){} }; point b[maxn]; vector<point> a; int cmp(point a,point b) { if(a.t==b.t) return a.id<b.id; else return a.t<b.t; } int main() { #ifdef debug freopen("in.in","r",stdin); #endif // debug a.clear(); int num=0,x,y; while(scanf("%s",st)!=EOF) { if(st[0]=='#') break; scanf("%d%d",&x,&y); b[num].id=x; b[num].t=y; num++; a.push_back(point(x,y)); } int k; scanf("%d",&k); for(int i=2;i<=k;i++) for(int j=0;j<num;j++) a.push_back(point(b[j].id,b[j].t*i)); sort(a.begin(),a.end(),cmp); for(int i=0;i<k;i++) printf("%d\n",a[i].id); return 0; }
题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1136
题解:先计算出每个id对应的时间,按规定排序后输出前k个即可。