Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:WA了一下午了,实在是觉得不可能有问题了还是WA,哪位帮忙看看,谢谢了In Reply To:WA了一下午了,实在是觉得不可能有问题了还是WA,哪位帮忙看看,谢谢了 Posted by:newpoo at 2007-04-18 17:28:41 思路应该比较清晰了,帮忙看看谢谢了 > #include <set> > #include <algorithm> > #include <functional> > > using namespace std; > > const int MAXN = 30000; > > struct Person > { > int ID, salary, height; > }; > > > struct CompSalary : public binary_function<bool, const Person &, const Person &> > { > bool operator()(const Person & p1, const Person & p2) > { > return p1.salary < p2.salary; > } > }; > > struct CompID : public binary_function<bool, const Person &, const Person &> > { > bool operator()(const Person & p1, const Person & p2) > { > return p1.ID < p2.ID; > } > }; > > Person persons[MAXN]; > Person personsT[MAXN]; > > int main(void) > { > int n, m, q, i, num, id; > Person t, * p, * p1, * p2; > scanf("%d", &n); > > > > while(n--) > { > scanf("%d%d", &m, &q); > for(i = 0; i < m; ++i) > { > scanf("%d%d%d", &persons[i].ID, &persons[i].salary, &persons[i].height); > personsT[i] = persons[i]; > } > sort(persons, persons+m, CompID()); > sort(personsT, personsT+m, CompSalary()); > > while(q--) > { > scanf("%d", &t.ID); > p = lower_bound(persons, persons+m, t, CompID()); > t.salary = p->salary; > p = lower_bound(personsT, personsT+m, t, CompSalary()); > num = id = 0; > for(p1 = personsT; p1 != p; ++p1) > { > if(p1->height <= p->height) > ++num; > } > if(p != personsT + m - 1) > { > for(p1 = p + 1; true; ++p1) > if(p1->height >= p->height) > { > id = p1->ID; > break; > } > } > printf("%d %d\n", id, num); > } > } > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator