PAT 甲级 1101 Quick Sort (25分) C++
2020-06-24 04:26
399 查看
1101 Quick Sort (25分)
感觉不算是一个排序题
题目大意:给定一个序列,检查每个元素是不是主元。
主元需要满足两个条件:
- 序列有序以后,其位置不变;
- 在原始序列中,主元比所有前面的元素值要大,比后面的元素值要小。
需要思考的地方:我感觉是第二个条件,不能够在检查序列每一个元素的同时,对前面或后面找到最小和最大元素(超时)。
可以将排序后的数列与原始数列进行逐个对比,并且记住当前原始数列的最大值,如果位置没有改变,则判断其是否大于前面所有元素(只需检查前半部分,如果前面有大于当前元素的元素,而当前元素的位置不变,那后半部分一定有小于当前元素的元素)
还有一个小tips:当不存在主元时,在输出数量以后,需要输出一个空行(测试点2)
#include<iostream> //输入输出流头文件 #include<stdio.h> //标准输入输出 #include<stdlib.h> #include<algorithm> //C++标准模板库的函数 #include<vector> //变长数组容器 using namespace std; //标准命名空间 int cmp(const void *a,const void *b){ return *(int*)a-*(int*)b; } int main(){ //主函数 #ifdef ONLINE_JUDGE //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入 #else freopen("1.txt", "r", stdin); //从1.txt输入数据 #endif int n,count=0,max=0; cin>>n; int *inp=new int[n]; int *nn=new int[n]; for(int i=0;i<n;i++){ int x; scanf("%d",&x); inp[i]=x; nn[i]=x; } qsort(inp,n,sizeof(int),cmp);//看到题目,下意识地用了qsort,其是sort就可以的 // sort(inp,inp+n); vector<int> ans; for(int i=0;i<n;i++){ if(nn[i]==inp[i]&&nn[i]>max) { count++; ans.push_back(nn[i]); } if(nn[i]>max)max=nn[i]; } cout<<count<<endl; for(int i=0;i<ans.size();i++){ cout<<ans[i]; if(i!=ans.size()-1)cout<<' '; } cout<<endl; return 0; //返回0,如果不返回0,PAT会报错 }
相关文章推荐
- PAT甲级 1125 Chain the Ropes (25分) 贪心/C++
- C++ PAT甲级 1010 Radix (25分)(一个超时,24分)
- PAT甲级 1137 Final Grading (25分) set+map/C++
- PAT甲级 1134 Vertex Cover (25分) hash/C++
- PAT甲级 1101 Quick Sort
- PAT甲级 1101. Quick Sort (25)
- PAT甲级 1129 Recommendation System (25分) set/C++
- PAT甲级 1149 Dangerous Goods Packaging (25分) map/C++
- C++ PAT甲级 1006 Sign In and Sign Out (25分)
- PAT甲级 1121 Damn Single (25分) set/C++
- C++ PAT甲级1117 Eddington Number (25分)
- PAT甲级 1126 Eulerian Path (25分) DFS/C++
- C++ PAT甲级 1002 A+B for Polynomials (25分)
- PAT甲级 1150 Travelling Salesman Problem (25分) C++
- PAT甲级——1101 Quick Sort (快速排序)
- PAT甲级 1153 Decode Registration Card of PAT (25分) map/C++
- PAT甲级 1142 Maximal Clique (25分) 图/C++
- PAT-A-1101 Quick Sort (25 分)打两个表,每一位左边最大的数,以及每一个右边最小的数 C++题解
- PAT甲级 1106 Lowest Price in Supply Chain (25分) DFS/C++
- PAT甲级 1154 Vertex Coloring (25分) map/C++