![[洛谷]P1059 明明的随机数](/default/index/img?u=aHR0cHM6Ly93YWxscGFwZXJjYXZlLmNvbS93cC93cDM3MzU3MDUuanBn&w=245&h=&w=700)
这是洛谷P1059的大暴力题解。
题目描述:
首先我们看到这题要去重和排序,所以我们可以利用暴力的方法定义一个bool数组,表示每个正整数是否出现过,这样顺便就完成了去重工作。最后再从数的范围内从小到大扫一遍输出即可。就这样,我们用巨大的空间复杂度换取了$ O(n+k) $的时间复杂度(k为输入的数组中最大的数)。代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <stack>
#include <set>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
#define file
inline void read(int &x){
x=0;int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
x*=f;
}
bool a[1005];
int digit[100005];
int ans=0;
void quick_sort(int *shuzu,int n)
{
for(int i=1;i<=n;i++)
if(!a[shuzu[i]])
{
a[shuzu[i]]=1;
ans++;
}
cout<<ans<<endl;
for(int i=1;i<=1000;i++)
if(a[i])
cout<<i<<" ";
}
int main(int argc, char const *argv[])
{
#ifndef file
char IN[105]=".in";
char OUT[105]=".out";
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
#endif
int n;
read(n);
for(int i=1;i<=n;i++)
read(digit[i]);
quick_sort(digit,n);
#ifndef file
fclose(stdin);
fclose(stdout);
#endif
return 0;
}