数据排序
- https://blog.nowcoder.net/sylvie
1.明明的随机数(NOIP2006)
题目解析:
- 需要先对输入的数据进行去重,然后对输入的数据进行排序
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1000;
int a[N];
int n;
int main()
{
while(cin>> n){
memset(a, 0, sizeof a);
int res = 0;
while(n--){
int x;
cin>> x;
a[x] = 1;
}
// 去重hash 排序sort
for(int i = 1; i <= N; i++){
if(a[i] == 1) res++;
}
cout<< res << endl;
for(int i = 1; i <= N; i++){
if(a[i] == 1){
if(i != N) cout<< i <<" ";
else cout<< i << endl;
}
}
}
return 0;
}
- https://blog.csdn.net/qq_41114451/article/details/85038583
2. 车厢重组 (carry)
题意: 只能交换两个数,并对数组进行排序, 问交换最少的步数(冒泡排序)
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 10010;
int a[N];
int n;
int main()
{
cin>> n;
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
int res = 0;
for(int i = 0; i < n; i++){
for(int j = i; j < n; j++){
if(a[i] > a[j]) swap(a[i], a[j]), res ++;
}
}
cout<< res << endl;
return 0;
}
- https://blog.csdn.net/xiaofang3a/article/details/24625509
- https://blog.csdn.net/FGFGFG2018/article/details/80355395
3.众数(masses)
解析
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 10010;
int a[N];
int n;
int main()
{
cin>> n;
memset(a, 0, sizeof a);
for(int i = 0; i < n; i++){
int x;
cin>> x;
a[x]++;
}
int res = 0;
for(int i = 0; i < n; i++){
if(res < a[i]) res = a[i];
}
for(int i = 0; i < n; i++){
if(res == a[i]){
cout<< i <<" " << a[i] << endl;
}
}
return 0;
}
4.第k小整数(knumber)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[10000],k;
cin>>n>>k;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
int len=unique(a,a+n)-a;
if(k<len)cout<<a[k-1];
else cout<<"NO RESULT";
return 0;
}
- https://blog.csdn.net/gz153016/article/details/81710312
5. 军事机密(secret)
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int a[40000] = { 0 };
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
sort(a, a + n);
cin >> n;
for (int i = 0; i < n; i++)
{
int tmp;
cin >> tmp;
cout << a[tmp - 1] <<endl;
}
return 0;
}
- 参考文章: https://blog.csdn.net/weixin_40427089/article/details/78710508
6. 奖学金(NOIP2007)
#include<cstdio>
#include<algorithm>
#define maxn 300
using namespace std;
struct tnode{int s,c,b;}a[maxn+20];
int n;
bool cmp(tnode x,tnode y)
{
if(x.s>y.s)return 1;
if(x.s<y.s)return 0;
if(x.c>y.c)return 1;
if(x.c<y.c)return 0;
return x.b<y.b;
}
int main()
{
int i,j,k,x,y,z;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&z);
a[i].s=x+y+z,a[i].c=x,a[i].b=i;
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=5;i++)printf("%d %d\n",a[i].b,a[i].s);
return 0;
}
- 参考文章:https://blog.csdn.net/yuyanggo/article/details/48572153
7. 统计数字(NOIP2007)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstdio>
#include<map>
using namespace std;
long long n,b;
map<long long,long long>a;
int c[100000000];
long long maxx=-10000000;
long long box;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&b);
if(a[b]==0) c[++box]=b;
a[b]++;
}
sort(c,c+1+box);
for(int i=1;i<=box;i++)
{
printf("%d %d\n",c[i],a[c[i]]);
}
}
参考文章: https://www.cnblogs.com/liaoshuangqi/p/10768144.html
8. 输油管道问题(pipe)
#include<iostream>
#include<cmath>
using namespace std;
void quickSort(int l, int r, int *data) {
if(l>=r) {
return;
}
int m = data[(l+r)/2];//中间的那个
int i=l;
int j=r;
while(i<=j){//等号!!!
while(data[i]<m)//从左找比中间的那个大的 不要等号!!!
i++;
while(data[j]>m)//从右找比中间的那个小的
j--;
if(i<=j){//交换
int tmp = data[i];
data[i]=data[j];
data[j]=tmp;
i++;
j--;
}
}//循环结束表示一趟已执行完
if(l<j)
quickSort(l, j, data);
if(r>i)
quickSort(i, r, data);
}
int main() {
int n;
int x[100000], y[100000];
cin>>n;
for(int i=0;i<n;i++){
cin>>x[i];
cin>>y[i];
}
quickSort(0, n-1, y);
int Y;
if(n%2)
Y = (y[n/2-1]+y[n/2])/2;
else
Y = y[n/2];
int res=0;
for(int i=0;i<n;i++)
res+=abs(y[i]-Y);
cout<<res<<endl;
return 0;
}
参考文章:https://blog.csdn.net/nico2333/article/details/88900442
9. 士兵站队问题
#include<iostream>
#include<cstdlib>
using namespace std;
const int MAXN = 10000;
int num,x[MAXN],y[MAXN],x1[MAXN];
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int far(int x,int y)
{
return x > y ? x-y : y-x;
}
int main()
{
int i,n,sum = 0;
cin>>n;
for(i = 0; i < n; i++)
cin>>x[num]>>y[num++];
qsort(x,num,sizeof(int),cmp);
qsort(y,num,sizeof(int),cmp);
int y_place = y[num/2];
for(i = 0; i < num; i++)
x1[i] = x[i] - i;
qsort(x1,num,sizeof(int),cmp);
int x_place = x1[num/2];
for(i = 0; i < num; i++)
sum += far(x1[i],x_place) + far(y[i],y_place);
cout<<sum<<endl;
return 0;
}
参考文章:https://blog.csdn.net/air_one/article/details/12677175