国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【BZOJ 4524】【CQOI 2016】偽光滑數(shù)

2019-11-06 06:40:13
字體:
供稿:網(wǎng)友

聽說這道題標(biāo)算是可持久化可并堆,但是用優(yōu)先隊(duì)列+貪心可以卡過去%%%。 首先找出所有小于128的質(zhì)數(shù),如果某個質(zhì)數(shù)的q次方(q任取)小于n,那么這就是一個可行方案,加入優(yōu)先隊(duì)列。 接著每次取出一個方案,去掉一個質(zhì)因數(shù),加入一個較小的質(zhì)因數(shù),就形成了一個新的方案,加入隊(duì)列,一直取k次即可。 具體實(shí)現(xiàn)方式是用一個四元組(x,i,j,k)表示一種方案,其中x表示當(dāng)前的數(shù);i那個最大的質(zhì)因數(shù)的次數(shù);j表示上一次加入的質(zhì)因數(shù),因?yàn)闉榱吮WC每一次方案不重復(fù),加入的質(zhì)因數(shù)必須越來越小;k表示最大的質(zhì)因數(shù)。

#include<cmath>#include<cstdio>#include<vector>#include <queue>#include<cstring>#include<iomanip>#include<stdlib.h>#include<iostream>#include<algorithm>#define ll long long#define inf 1000000000#define mod 1000000007#define N 20000#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;struct tuple{ll v; int t,PRe,p;} g;bool Operator<(tuple a,tuple b){return a.v<b.v;}priority_queue<tuple> q;int i,j,k,sp;ll n,t;int f[N],p[N];//當(dāng)前數(shù)、最大質(zhì)因數(shù)的次數(shù)、下一次選的質(zhì)因數(shù)的下標(biāo)的上限、最大質(zhì)因數(shù)的下標(biāo)int main(){ scanf("%lld%d",&n,&k); fo(i,2,128) if (!f[i]){p[++sp]=i;t=i;while(t<=128) f[t+=i]=1;} fo(i,1,sp) for (t = j = 1;(t * p[i]) <= n; j++) { t *= p[i]; q.push(tuple{(ll)t,j,i-1,i}); } while (k--) { g = q.top(); q.pop(); if (g.t > 1) { fd(i,g.pre,1) { ll u = g.v/p[g.p]*p[i]; q.push(tuple{(ll)u , g.t-1 , i , g.p}); } } } printf("%lld/n",g.v); return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 海南省| 上饶县| 民乐县| 定远县| 房产| 同江市| 宜城市| 会昌县| 平邑县| 锡林浩特市| 神农架林区| 繁峙县| 山西省| 美姑县| 张家港市| 大兴区| 临朐县| 长泰县| 东阳市| 定远县| 黔西| 盐源县| 莱阳市| 招远市| 甘德县| 汉沽区| 绥阳县| 杭锦后旗| 疏附县| 宁陵县| 巴马| 开化县| 叙永县| 宁晋县| 建始县| 闵行区| 高雄县| 曲阜市| 巴林左旗| 双柏县| 渑池县|