PAT1055___排序神题
2013-10-12 21:45
162 查看
题目意思比较简单,按财富,年龄,姓名来排序
看似挺普通的,但被坑了20多次TLE
首先排序只要一次,就是按题目规定的进行排序
然后在查询的时候,不是从头扫到尾看是否符合年龄的限制,而是记录这个年龄组在数组中的起始结束位置是多少,AC
View Code
看似挺普通的,但被坑了20多次TLE
首先排序只要一次,就是按题目规定的进行排序
然后在查询的时候,不是从头扫到尾看是否符合年龄的限制,而是记录这个年龄组在数组中的起始结束位置是多少,AC
#include<stdio.h> #include<iostream> #include<queue> #include<vector> #include<string.h> #include<algorithm> using namespace std; struct data{ char name[19]; int age; int worth; }s[100099]; int ageFrom[209],ageEnd[209]; int cmp(data x,data y){ if(x.worth==y.worth) if(x.age==y.age) return strcmp(x.name,y.name)<0; else return x.age<y.age; else return x.worth>y.worth; } int main() { int n,m; scanf("%d%d",&n,&m);{ data temp; int i; for(i=0;i<=200;i++){ ageFrom[i]=-1; ageEnd[i]=-1; } for(i=1;i<=n;i++){ scanf("%s",s[i].name); scanf("%d%d",&s[i].age,&s[i].worth); } sort(&s[1],&s[1+n],cmp); for(i=1;i<=n;i++){ if(ageFrom[s[i].age]==-1){ ageFrom[s[i].age]=i; } ageEnd[s[i].age]=i; } int j,k; for(i=1;i<=m;i++){ printf("Case #%d:\n",i); int size,ll,rr,add=0,first=9999999,end=0; scanf("%d%d%d",&size,&ll,&rr); for(k=ll;k<=rr;k++){ first=min(first,ageFrom[k]); end=max(end,ageEnd[k]); } for(k=first;k<=end;k++){ if(s[k].age>=ll&&s[k].age<=rr){ printf("%s %d %d\n",s[k].name,s[k].age,s[k].worth); add++; if(add==size)break; } } if(add==0)printf("None\n"); } } return 0; }
View Code
相关文章推荐
- PAT 1055. The World's Richest (25)(净资产排序,然后按照年纪分类输出m个)
- PAT (Advanced Level) 1055. The World's Richest (25) 年龄区间内最有钱的人,结构体排序
- PAT乙级 1055. 集体照 (25) 结构体字符串字典排序,双端队列
- Pat - 甲级 - 1055. The World's Richest (25)(排序)
- PAT 1055. The World's Richest (25) 年龄排序问题(O(n)排序)
- 1055. The World's Richest (25)【排序】——PAT (Advanced Level) Practise
- PAT_1055 world richest 多键排序
- PAT甲题题解-1055. The World's Richest (25)-终于遇见一个排序的不水题
- PAT1045 快速排序
- PAT 1016. Phone Bills (25) 数据结构,排序
- 3-09. 队列中的元素排序【pat】
- PAT (Advanced Level) Practise 1055 The World's Richest (25)
- PAT (Advanced Level) 1025. PAT Ranking (25) 结构体排序
- PAT (Advanced Level) 1038. Recover the Smallest Number (30) 串联最小字符串,排序
- PAT--1012. The Best Rank(排序)
- 1038. Recover the Smallest Number (30)【排序】——PAT (Advanced Level) Practise
- 1095. Cars on Campus (30)-PAT甲级真题(map,排序)
- 1055. 集体照 (25)-PAT乙级真题
- PAT 1052. Linked List Sorting (25) 链表排序,链表特殊情况判断
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题