題意:給定乙個整數n,給定乙個整數k,將1~n個整數按字典順序進行排序,返回排序後第k個元素。
多組輸入,t<=100,n<=1e6
分析:這個題和之前做的模擬出棧的性質挺像的,不是你將1-n個數字排好序或者直接算出第k個數時誰,而是模擬題意的炒作,一步步填充,填充到第k個元素結束
可以分成兩步來做,首先求出以1,2......9開頭的數且小於n的數總共有多少個,並且每算出乙個就用k-數目,如果到了某個數不夠減了,說明我們要求的那個數就是一這個數開頭的,跳出迴圈。
第二步,一點點來,具體實現就直接看**吧
我自己寫還是錯了很多次才最終寫對
#includeusingnamespace
std;
typedef
long
long
ll;const
int inf=1
<<30
;const
int maxn=6007
;const
double pi=acos(-1
);const
int mod=1e9+7
;int ans=0
,n,k;
//用來得到比n小,以i為開頭的數的數目
int getnum(int n,int
i)
if(n>=(base*i))sum+=n-base*i+1
;
return
sum;
}void getans(int &cnt,int
cul)
for(int i=0;i<=9;i++)
}int
main()
int cnt=0
; getans(cnt,i);
cout
}return0;
}
題目26 關於1 N的整數查詢排序問題
題目 此題緣於 程式設計珠璣 乙個檔案包含最多n個正整數,每乙個都小於 n,每乙個數都不會出現兩次以上。將這個檔案排序。珠璣上的解法 phase 1 initialize set to empty for i 0,n bit i 0 phase 2 insert present elements i...
堆排序示例 對n個整數進行排序
堆排序是一種比較高效的演算法.雖然在大規模排序時不及快排,但是這個演算法較容易實現,不易錯 因為沒有用到遞迴 一般規模的排序還是效果不錯的.以下是示例 includeusing namespace std void heapsort int num,int n func decl.int main ...
對n個整數用O n 的時間進行排序
1 求得min,max 2 開闢空間 a 0,max min 1 3 if min 0 data i min else data i min 4 for i 0 to n a data i 1 5 index 0 for i 0 to max min if a i 1 data index i in...