【xsy2815】净空 大暴力

绝了场上居然没做这一题

题目大意:给你一个数x=Πni=1ai!

你需要将x表示为x=Πmi=1(ci!)dip

满足p无法再分解,且(c1,d1,c2,d2,...,cm,dm)的字典序最大。

数据范围:1n,ai105

 

我们考虑预处理出105内的质数。

读入数列a后,我们对数列a进行一些处理。令sum[i]表示数列a中出现了多少个质因子p[i],其中p[i]表示第i个质数。

然后,我们从大到小枚举ci,然后再判断di是否可行。

这么搞复杂度貌似是O(n2ln n)的,然而实际上它跑得飞快?

复制代码
 1 #include<bits/stdc++.h>
 2 #define M 100010
 3 #define L long long
 4 using namespace std;
 5 
 6 int pri[M]={0},las[M]={0},id[M]={0},use=0;
 7 void init(){
 8     for(int i=2;i<M;i++){
 9         if(!las[i]) id[pri[++use]=i]=use,las[i]=1;
10         for(int j=1;j<=use&&i*pri[j]<M;j++){
11             las[i*pri[j]]=i;
12             if(i%pri[j]==0) break;
13         }
14     }
15 }
16 
17 L a[M]={0},sum[M]={0},now[M]={0};
18 int ansx[M]={0},ansy[M]={0},cnt=0,top=0;
19 bool cmp(){
20     for(int i=top;i;i--)
21     if(sum[i]<now[i]) return 0;
22     return 1;
23 }
24 
25 int main(){
26     init(); top=use;
27     int n; scanf("%d",&n);
28     for(int i=n,x;i;i--) scanf("%d",&x),a[x]++;
29     for(int i=M-2;i;i--) a[i]+=a[i+1];
30     for(int i=M-1;i;i--){
31         for(int j=i;j>1;j=las[j]){
32             int p=id[j/las[j]];
33             sum[p]+=a[i],now[p]++;
34         }
35     }
36     for(int i=M-1;i>1;i--){
37         if(cmp()){
38             L mns=M;
39             for(int j=top;j;j--) if(now[j]) mns=min(mns,sum[j]/now[j]);
40             for(int j=top;j;j--) sum[j]-=now[j]*mns;
41             cnt++; ansx[cnt]=i; ansy[cnt]=mns;
42         }
43         for(int j=i;j>1;j=las[j]){
44             int p=id[j/las[j]];
45             now[p]--;
46         }
47         while(top&&now[top]==0) top--;
48     }
49     printf("%d\n",cnt);
50     for(int i=1;i<=cnt;i++) printf("%d %d\n",ansx[i],ansy[i]);
51 }
复制代码

 

posted @   AlphaInf  阅读(196)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2018-03-19 【2018北京集训6】Lcm DFT&FWT
点击右上角即可分享
微信分享提示