codevs 2147 数星星 离散化?解题报告

来源:互联网 发布:jmeter 安装mac版 编辑:程序博客网 时间:2024/06/15 12:38

题目描述 Description

小明是一名天文爱好者,他喜欢晚上看星星。这天,他从淘宝上买下来了一个高级望远镜。他十分开心,于是他晚上去操场上看星星。

不同的星星发出不同的光,他的望远镜可以计算出观测到的星星发出的光的数值W。小明当然想尽可能地多看到星星,于是他每看到一颗星星,就要看看他之前有没有看过这颗星星。但是他看的星星太多了,他根本数不过来,于是他让你帮忙。

输入描述 Input Description

共有两行,第一行只有一个整数,为小明观测到的星星的数量n。第二行有n个整数,每两个整数由一个空格隔开,分别为小明观测到每颗星星的光的数值W[1]-W[n]。

输出描述 Output Description

只有一行,这一行共有n个数字0或1。0表示对应的星星之前没有观测到,1表示对应的星星之前已经看过了。注意:数字之间没有空格!

样例输入 Sample Input

5

1 5 5 4 1

样例输出 Sample Output

00101

数据范围及提示 Data Size & Hint

样例是往往是骗人的,本题中

30%的数据,0

思路

w太大了,不可以开数组;
但是他只让判重,所以离散化大水题身份确定。

代码

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define debug coutusing namespace std;const int maxn=5e5+1e2;int in[maxn],srt[maxn],n,len;bool vis[maxn];int main(){    scanf("%d",&n);    for (int i=1;i<=n;i++)     scanf("%d",in+i),srt[i]=in[i];    sort(srt+1,srt+1+n);    len=unique(srt+1,srt+1+n)-srt-1;    for (int i=1,pos;i<=n;i++)    {        pos=lower_bound(srt+1,srt+1+len,in[i])-srt;        if (vis[pos]) putchar('1');        else putchar('0'),vis[pos]=1;    }    putchar('\n');    return 0;}
原创粉丝点击