BZOJ 4524 Cqoi2016 偽光滑數

2021-07-11 22:35:25 字數 909 閱讀 6866

和d1的k遠點對類似的k優解求法

首先找到乙個集合使得當前最優解一定在其中

然後每次找到最優解並把與它有關且(必定)劣於它的加到集合裡去

重複k-1次

對於這道題顯然一開始的集合就是pi^j,pi為質數且pi<128,pi^j<=n

然後每次擴充套件就是把乙個數中的其中乙個質因數變小一點

當然還要hash判重

(hash表好像寫得有問題qaq跑得巨慢無比)

#include#include#include#include#include#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)

#define per(i,r,l) for(int i=r;i>=l;i--)

#define mmt(a,v) memset(a,v,sizeof(a))

#define tra(i,u) for(int i=head[u];i;i=e[i].next)

using namespace std;

typedef long long ll;

const int m=2000003;

struct edge;

struct hash_table;head[u]=cnt;

} bool find(ll v)

}h;int p[40],tot;

bool is[150];

void sieve() }}

struct node

bool operator < (const node &x)const

while(k--)

} printf("%lld\n",q.top().v);

return 0;

}

bzoj 4524 Cqoi2016 偽光滑數

看到求第k大,k很小,首先應該想到k路歸併。利用可持久化可並堆進行dp g i j 表示前i個素數,用了j個質因子可以表示的數的集合 g i j sigma g i 1 j k p i k sigma表示集合的並,乘法用打標記實現。然後k路歸併,按照使用了的質因子個數分類。令mx j 表示取j個質因...

bzoj 4524 Cqoi2016 偽光滑數

若乙個大於1的整數m的質因數分解有k項,其最大的質因子為ak,並且滿足ak k n,ak 128,我們就稱整數m為n 偽光滑數。現在給出n,求所有整數中,第k大的n 偽光滑數。這種問題首先發現乙個數是否是偽光滑數隻跟它的最大的質因子和分解後的項數有關,而只有31種質因子,所以總共的類別是有限的 把最...

bzoj4524 CQOI2016 偽光滑數

time limit 10 secmemory limit 512 mb若乙個大於r的整數j的質因數分解有f項,其最大的質因子為ak,並且滿足ak k n,ak 128,我們就稱整數j為n 偽光滑數。現在給出l,求所有整數中,第e大的n 偽光滑數。只有一行,為用空格隔開的整數l和e。2 n 10 1...