找最小的k個數(優先佇列)

2021-08-02 11:19:15 字數 877 閱讀 5315

描述

青大最優雅的程式設計師kkun一直友好(?)的致力於為學妹們出一道做法優雅而且非常簡單的題。

例如著名的「一道非常簡單的爐石題」,「一道非常簡單的簽到題」,「一道非常簡單的數學題」,「一道非常簡單的平衡樹套替罪羊樹套喜羊羊樹套聖誕樹套動態仙人掌」,「一道非常簡單的簽到題」(這個人是真的優雅,比那個菜凡不知道高到**去了!)

這次也不例外,他想從no cer那裡拿到n個數,並找到其中最小的k個數。

但是no cer只是扔給了他乙個公式:val[i]=k^(i+1)%1000000007(1<=i<=n),並讓他自己一邊玩去。

kkun頓時覺得這個問題變得索然無味,所以他讓你來解決這個問題。

最終從大到小輸出最小的k個數。

輸入 第一行乙個整數t代表資料組數

每組資料中

第一行兩個整數n,k

n<=1e7

k<=1e4

k<=n

輸出 從大到小輸出k個數,每組資料佔一行

樣例輸入1 複製

1 3 2

樣例輸出1

8 4沒看這題。= =乙個優先佇列

#include 

using namespace std;

const int n = 1e7+100;

typedef long long ll;

ll a[n];

const int mod = 1e9+7;

int main()

for(int i=m+1;i<=n;i++)

}printf("%d",q.top() );

q.pop();

for(int i=1;iprintf("\n");

}}

面試訓練找最小k個數

比較簡單吧 方法 1 快排取前k個 方法2 不快排,遞迴求partion,時間 複雜度o n 吧 include stdio.h int partion int data,int s,int e void getlistk int data,int start,int len,int k,multi...

最小的K個數

問題描述 給定的n個整數,計算其中最小的k個數。最直觀的解法莫過於將n個數按公升序排列後輸出前k個。但是就效率來看,這種方法並不是最理想的。一種改進方法是借助快速排序中對陣列的劃分,以第k個元素對陣列進行劃分,使得比第k個數字小的數字都在其左邊,比其大的數字都在它的右邊。void swap int ...

最小的K個數

從 陣列中出現次數超過一半的數字 得到啟發,同樣可以基於partition函式來解決。一 o n 演算法 void getleastnumbers int input,int n,int output,int k else for int i 0 i k i output i input i 二 o...