排序
题目描述
利用快速排序算法将读入的 NN 个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。( C++C++ 选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)
输入输出格式
输入格式:
第 11 行为一个正整数 NN ,第 22 行包含 NN 个空格隔开的正整数 a_iai ,为你需要进行排序的数,数据保证了 A_iAi 不超过 10000000001000000000 。
输出格式:
将给定的 NN 个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
说明
对于 20\%20% 的数据,有 N≤1000N≤1000 ;
对于 100\%100% 的数据,有 N≤100000N≤100000 。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define random(a,b) (rand()%(b-a+1)+a) 4 int a[100005]; 5 int m(int l,int r); 6 void s(int l,int r); 7 int main(){ 8 int n; 9 scanf("%d",&n); 10 for(int i=0;i<n;i++){ 11 scanf("%d",&a[i]); 12 } 13 s(0,n); 14 for(int i=0;i<n;i++){ 15 printf("%d ",a[i]); 16 } 17 } 18 void s(int l,int r){ 19 if(l<r){ 20 int p=m(l,r); 21 s(l,p); 22 s(p+1,r); 23 } 24 } 25 int m(int l,int r){ 26 srand((unsigned)time(NULL)); 27 int t=random(l,r-1); 28 swap(a[r-1],a[t]); 29 int k=a[r-1]; 30 int i=l-1,j=l; 31 while(j<r-1){ 32 if(a[j]<=k) i++,swap(a[i],a[j]); 33 j++; 34 } 35 swap(a[i+1],a[r-1]); 36 return i+1; 37 }
-
- 19.9K通过
- 37K提交
- 题目提供者CCF_NOI
- 评测方式云端评测
- 标签NOIp普及组2006
- 难度入门难度
- 时空限制1000ms / 128MB
- 提示:收藏到任务计划后,可在首页查看。
最新讨论显示
推荐的相关题目显示
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 11 到 10001000 之间的随机整数 (N≤100)(N≤100) ,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入输出格式
输入格式:
输入有两行,第 11 行为 11 个正整数,表示所生成的随机数的个数 NN
第 22 行有 NN 个用空格隔开的正整数,为所产生的随机数。
输出格式:
输出也是两行,第 11 行为 11 个正整数 MM ,表示不相同的随机数的个数。
第 22 行为 MM 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入输出样例
说明
NOIP 2006 普及组 第一题
1 #include<bits/stdc++.h> 2 using namespace std; 3 set<int>s; 4 int n; 5 int main(){ 6 scanf("%d",&n); 7 for(int i=0;i<n;i++){ 8 int a; 9 scanf("%d",&a); 10 s.insert(a); 11 } 12 set<int>::iterator pos; 13 printf("%d\n",s.size()); 14 for(pos=s.begin();pos!=s.end();pos++){ 15 printf("%d ",*pos); 16 } 17 }
P1068 分数线划定
题目描述
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才, AA 市对
所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根
据计划录取人数的 150\%150% 划定,即如果计划录取 mm 名志愿者,则面试分数线为排名第 m \times 150\%m×150%
(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有
选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成
绩。
输入输出格式
输入格式:
第一行,两个整数 n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n)n,m(5≤n≤5000,3≤m≤n) ,中间用一个空格隔开,其
中 nn 表示报名参加笔试的选手总数, mm 表示计划录取的志愿者人数。输入数据保证 m \times 150\%m×150%
向下取整后小于等于 nn 。
第二行到第 n+1n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号 k(1000 ≤ k ≤ 9999)k(1000≤k≤9999)和该选手的笔试成绩 s(1 ≤ s ≤ 100)s(1≤s≤100) 。数据保证选手的报名号各不相同。
输出格式:
第一行,有 22 个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。
从第二行开始,每行包含 22 个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。
输入输出样例
6 3 1000 90 3239 88 2390 95 7231 84 1005 95 1001 88
88 5 1005 95 2390 95 1000 90 1001 88 3239 88
说明
【样例说明】
m \times 150\% = 3 \times150\% = 4.5m×150%=3×150%=4.5 ,向下取整后为 44 。保证 44 个人进入面试的分数线为 8888 ,但因为 8888 有重分,所以所有成绩大于等于 8888 的选手都可以进入面试,故最终有 55 个人进入面试。
NOIP 2009 普及组 第二题
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct p{ 4 int hao,bi; 5 }a[5005]; 6 set<int> s; 7 int n,m; 8 bool cmp(p x,p y); 9 int main(){ 10 scanf("%d%d",&n,&m); 11 m=m*1.5; 12 for(int i=0;i<n;i++) scanf("%d%d",&a[i].hao,&a[i].bi); 13 sort(a,a+n,cmp); 14 int fen=a[m-1].bi; 15 int sum=0; 16 for(int j=0;j<n;j++) if(a[j].bi>=fen) sum++; 17 printf("%d %d\n",fen,sum); 18 for(int j=0;j<n;j++) if(a[j].bi>=fen) printf("%d %d\n",a[j].hao,a[j].bi); 19 } 20 bool cmp(p x,p y){ 21 if(x.bi!=y.bi) return x.bi>y.bi; 22 return x.hao<y.hao; 23 }
P1781 宇宙总统
题目背景
宇宙总统竞选
题目描述
地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。
输入输出格式
输入格式:
president.in
第一行为一个整数n,代表竞选总统的人数。
接下来有n行,分别为第一个候选人到第n个候选人的票数。
输出格式:
president.out
共两行,第一行是一个整数m,为当上总统的人的号数。
第二行是当上总统的人的选票。
输入输出样例
说明
票数可能会很大,可能会到100位数字。
n<=20
1 #include<bits/stdc++.h> 2 using namespace std; 3 char s[105]; 4 char s1[105]; 5 int main(){ 6 int n; 7 scanf("%d",&n); 8 int ma=0; 9 int xiabiao=-1; 10 for(int i=0;i<n;i++){ 11 scanf("%s",s); 12 int len=strlen(s); 13 if(len>ma) strcpy(s1,s),ma=len,xiabiao=i+1; 14 else if(len==ma){ 15 int flag=0; 16 for(int i=0;i<len;i++){ 17 if(s1[i]<s[i]){ 18 flag=1;break; 19 } 20 else if(s1[i]>s[i]) break; 21 } 22 if(flag) strcpy(s1,s),xiabiao=i+1; 23 } 24 } 25 printf("%d\n%s\n",xiabiao,s1); 26 }
浙公网安备 33010602011771号