找最小的k個數(優先佇列)
kkun的一道簡單簽到題
釋出時間: 2017年6月11日 17:59 最後更新: 2017年6月11日 18:10 時間限制: 2000ms 記憶體限制: 512M
描述
青大最優雅的程式設計師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 <bits/stdc++.h>
using namespace std;
const int N = 1e7+100;
typedef long long ll;
ll a[N];
const int mod = 1e9+7;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
priority_queue<int> Q;
a[0]=m;
for(int i=1;i<=n;i++)
{
a[i]=a[i-1]*m%mod;
if(i<=m)
Q.push(a[i]);
}
for(int i=m+1;i<=n;i++)
{
int top=Q.top();
if(a[i]<top)
{
Q.pop();
Q.push(a[i]);
}
}
printf("%d",Q.top() );
Q.pop();
for(int i=1;i<m;i++)
{
printf(" %d",Q.top() );
Q.pop();
}
printf("\n");
}
}
相關文章
- NO GAME NO LIFE(優先佇列/最小堆)GAM佇列
- STL優先佇列最小堆最大堆佇列
- POJ 2051(最小堆/優先佇列)佇列
- STL醜數(set+優先佇列)佇列
- MaxHeap 最大堆 MinHeap 最小堆 PriorityQueue 優先佇列實現佇列
- PHP優先佇列PHP佇列
- 堆--優先佇列佇列
- 優先佇列 (轉)佇列
- POJ 2442-Sequence(優先佇列-m組n個數每組取一個求n個最小值)佇列
- 8.13(優先佇列貪心維護+打表找規律+對頂堆優先佇列+DFS減枝+貪心dp)佇列
- 淺談優先佇列佇列
- STL 優先佇列 用法佇列
- 堆與優先佇列佇列
- 堆和優先佇列佇列
- 找到無序陣列中最小的k個數陣列
- 優先佇列的比較器佇列
- 堆——神奇的優先佇列(上)佇列
- 優先佇列的效能測試佇列
- 優先佇列和堆排序佇列排序
- 堆排序與優先佇列排序佇列
- Java優先佇列(PriorityQueue)示例Java佇列
- POJ 3253-Fence Repair(哈夫曼樹-最小值優先佇列)AI佇列
- 01揹包優先佇列優化佇列優化
- hdu 4546 優先佇列 數列組合和第m小佇列
- 棧,佇列,優先順序佇列簡單介面使用佇列
- Redis實現任務佇列、優先順序佇列Redis佇列
- 封裝優先順序佇列封裝佇列
- 二叉堆優先佇列佇列
- POJ 3253 Fence Repair 優先佇列AI佇列
- hdu5040 優先佇列+bfs佇列
- 個推基於 Apache Pulsar 的優先順序佇列方案Apache佇列
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- [PY3]——實現一個優先順序佇列佇列
- 演算法面試(三) 優先佇列演算法面試佇列
- 【圖論】拓撲排序+優先佇列圖論排序佇列
- 1007(優先佇列)佇列
- POJ 1724 ROADS(優先佇列+spfa)佇列
- POJ2431 Expedition (優先佇列)佇列