好多次都是WA,无奈百度之,看着别人的代码和自己也差不多啊,后来通过一位博主的一段发现了问题
- if(val[i].salary < goalSalary && val[i].height <= goalHeight)//若前面所有i的身高都比goal身高矮,则即使i不是goal的下属,也是i到goal中j的下属,而j肯定是goal的下属,所以i也是goal的下属
- {
- sNum++;
- }
- //i的身高大于goalheight,即i之前的员工都是i的下属,而i与goal之间没有上下属关系。
- else
- {
- sNum =0;
- }
自己AC的代码如下
#include <iostream>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
#include <stdio.h>
#include <math.h>
#include <list>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
struct Node{
int id;
int sa;
int height;
};
int cmp(const Node &n1, const Node &n2)
{
if(n1.sa < n2.sa )
return 1;
else
return 0;
}
void display(Node *arr , int n)
{
for(int i=0;i<n;i++)
cout<<arr[i].id<<" "<<arr[i].sa<<" "<<arr[i].height<<endl;
}
int main()
{
int t;
cin>>t;
while(t >0)
{
int m,q;
cin>>m>>q;
Node *arr = new Node[m];
int id,sa,he;
for(int i=0;i<m;i++)
{
cin>>id>>sa>>he;
arr[i].id = id;
arr[i].sa = sa;
arr[i].height = he;
}
sort(arr,arr+m,cmp);
//display(arr,m);
for(int i=0;i<q;i++)
{
cin>>id;
int index = 0;
while(arr[index].id != id)
index++;
int id1 = index+1;
while(id1 < m)
{
if(arr[id1].height >= arr[index].height && arr[id1].sa > arr[index].sa)
break;
id1++;
}
if(id1 < m)
cout<<arr[id1].id<<" ";
else
cout<<"0 ";
int id2 =0;
int count = 0;
while(id2 <=index-1 )
{
if(arr[id2].height <= arr[index].height )
count++;
else
count= 0;
id2++;
}
// if(id2 >=0)
// cout<< id2+1<<endl;
// else
cout<<count<<endl;
}
t--;
}
}