{2018.4.21}荀(gou)彧(huo)同学的函数与排序整合

今天是一个值得纪念的日子;

荀彧同学刷完了oj上第一页所有题;
第99道题,令荀彧同学感触颇深,虽然并不是独立完成的(借鉴了连浩明同学的代码),但是还是有必要整合一下;
老规矩,先把题目放上来:

题目描述

在使用离散化方法编程时,通常要知道每个数排序后的编号(rank值)。相同的数对应一个编号。

rank[i]表示第i个数在所有数里的排名。

输入格式

第1行:一个整数N,范围在[1…100000]。 第2行:有N个整数,每个数都是int范围的。注意:可能有相同整数。

输出格式

依次输出每个数的排名。

样例数据

input

5
8 2 6 9 2

output

3 1 2 4 1

数据规模与约定

保证1<=N<=100000 每个数不超过1000000

时间限制:1s1s

空间限制:256MB256MB

好啦,现在来讲一讲荀彧同学的思路:
毕竟是一道数组排序题嘛,那就先把数组放进来;
于是想用函数的荀彧同学就用了一个void型的函数,叫做cina,意思是插入a数组;
然后排序排一下,就用了一个很水很水的void函数,叫paixu,只有一行sort函数的代码;
接下来对排序后的数组进行标记;
最后输出;
放代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000100]={},b[1000100]={},c[1000100]={},d=1;
void cina()
{
 cin>>n;
 for(int i=1;i<=n;i++)
 {
  cin>>a[i];
  b[i]=a[i];
 }
}
void paixu()
{
 sort(a+1,a+n+1);
}
void biaoji()
{
 for(int i=1;i<=n-1;i++)
 if(a[i+1]!=a[i])
 {
  c[a[i]]=d;
  d++;
 }
 c[a[n]]=d;
}
void couta()
{
 for(int i=1;i<=n-1;i++)
 cout<<c[b[i]]<<' ';
 cout<<c[b[n]];
}
int main()
{
 cina();
 paixu();
 biaoji();
 couta();
 return 0;
}
今天终于决定了要尝试一下信息学竞赛,以后少划水,多刷题;
全文终。







猜你喜欢

转载自blog.csdn.net/Tereya/article/details/80032266
今日推荐