poj 1634
題意:
一個員工A的直接上司是那些薪水大于A,并且身高>=A的人中薪水最少的一個。
主席CEO的薪水最高,且身高也是最高的。
有多組數(shù)據(jù)。
每組數(shù)據(jù)給出m個員工,和q個詢問。
每個員工有id、薪水、身高。
對于每個詢問,給出某個id,讓你求該員工的直接上司的id和該員工的下屬的個數(shù)。
若該員工是CEO,則他的上司的id為0。
解題思路:這道題目很簡單,就是先按薪水排序,然后遞推去算手下員工的個數(shù)。。。比較水
AC:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int maxn = 30005; struct Staff {int id,salary,h; }staff[maxn]; int n,m,idx[1000000]; int num[maxn],fa[maxn];bool cmp(Staff a,Staff b) {return a.salary < b.salary; }int main() {int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i = 1; i <= n; i++) num[i] = 1;memset(fa,0,sizeof(fa));for(int i = 1; i <= n; i++)scanf("%d%d%d",&staff[i].id,&staff[i].salary,&staff[i].h);sort(staff+1,staff+1+n,cmp);for(int i = 1; i <= n; i++){idx[staff[i].id] = i;for(int j = i + 1; j <= n; j++){if(staff[j].h >= staff[i].h){fa[i] = j;num[j] += num[i];break;}}}for(int i = 1; i <= m; i++){int id;scanf("%d",&id);int u = idx[id];printf("%d %d\n",staff[fa[u]].id,num[u]-1);}}return 0; }總結
- 上一篇: 【升级包】jeecg_online 支持
- 下一篇: UI标签库专题十:JEECG智能开发平台