Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 8098 | Accepted: 3176 |
Description
Input
Output
Sample Input
5 300 100 100 300 400 200 200 400 100 500 0
Sample Output
2
Source
那么任意比m距离近的旅馆都比m的价格贵的m 一定是candidate hotel 的,
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=10001; struct edge { int dis,cost; }map[maxn]; bool cmp(edge x,edge y)//按照距离从小到大排序,距离相等的按照价格排序 { if(x.dis == y.dis){ <span style="white-space:pre"> </span>return x.cost < y.cost; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return x.dis < y.dis; } int main() { int n,i,ans,count; while(scanf("%d",&n)&&n) { ans=maxn; count=0; for(i=0;i<n;i++) scanf("%d%d",&map[i].dis,&map[i].cost); sort(map,map+n,cmp); for(i=0;i<n;i++) { if(map[i].cost<ans) { count++; ans=map[i].cost; } } printf("%d\n",count); } return 0; }不用排序的算法;
只要将距离相同的hotel中价格最低的存下来,数组的序号就是距离。
hotel[distance]=min(price);再统计数列中非递增的个数就是结果。
#include <cstdio> #include <cstring> const int maxn=10001; int map[maxn]; int main() { int n,i,dis,cost,len,j,count,min; while(scanf("%d",&n)&&n) { len=0; count=1; for(i=0;i<maxn;i++) map[i]=maxn; for(i=0;i<n;i++) { scanf("%d%d",&dis,&cost); if(map[dis]>cost) map[dis]=cost;//保存最低的价格 if(len<dis) len=dis; } i=0; while(map[i]==maxn) i++; min=map[i]; for(j=i+1;j<=len;j++) { if(map[j]<min) { count++;//求非递增的个数 min=map[j]; } } printf("%d\n",count); } return 0; }
原文地址:http://blog.csdn.net/whjkm/article/details/39185883