【codevs2147】數星星
阿新 • • 發佈:2019-02-16
題目描述 Description
小明是一名天文愛好者,他喜歡晚上看星星。這天,他從淘寶上買下來了一個高階望遠鏡。他十分開心,於是他晚上去操場上看星星。
不同的星星發出不同的光,他的望遠鏡可以計算出觀測到的星星發出的光的數值W。小明當然想盡可能地多看到星星,於是他每看到一顆星星,就要看看他之前有沒有看過這顆星星。但是他看的星星太多了,他根本數不過來,於是他讓你幫忙。
輸入描述 Input Description共有兩行,第一行只有一個整數,為小明觀測到的星星的數量n。第二行有n個整數,每兩個整數由一個空格隔開,分別為小明觀測到每顆星星的光的數值W[1]-W[n]。
輸出描述 Output Description只有一行,這一行共有n個數字0或1。0表示對應的星星之前沒有觀測到,1表示對應的星星之前已經看過了。注意:數字之間沒有空格!
樣例輸入 Sample Input5
1 5 5 4 1
樣例輸出 Sample Output00101資料範圍及提示 Data Size & Hint
樣例是往往是騙人的,本題中
30%的資料,0<n≤5000。
20%的資料,-20000≤W≤20000。
60%的資料,0<n≤50000。
100%的資料,0<n≤500000;-2000000000≤W≤2000000000。
【題解】離散化之後排序模擬一下
【程式碼】
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; struct hp{ int num,val; }a[500005]; int n,b[500005]; int cmp(hp a,hp b){ return (a.val<b.val||a.val==b.val&&a.num<b.num); } int main(){ scanf("%d",&n); for (int i=1;i<=n;++i) scanf("%d",&a[i].val),a[i].num=i; sort(a+1,a+n+1,cmp); for (int i=1;i<=n;++i) if (i==1||a[i].val!=a[i-1].val) b[a[i].num]=0; else b[a[i].num]=1; for (int i=1;i<=n;++i) printf("%d",b[i]); }