【xsy2815】净空 大暴力
绝了场上居然没做这一题
题目大意:给你一个数$x=\Pi_{i=1}^{n}a_i!$。
你需要将x表示为$x=\Pi_{i=1}^{m}(c_i!)^{d_i}p$
满足$p$无法再分解,且$(c_1,d_1,c_2,d_2,...,c_m,d_m)$的字典序最大。
数据范围:$1≤n,a_i≤10^5$。
我们考虑预处理出$10^5$内的质数。
读入数列$a$后,我们对数列$a$进行一些处理。令$sum[i]$表示数列$a$中出现了多少个质因子$p[i]$,其中$p[i]$表示第i个质数。
然后,我们从大到小枚举$c_i$,然后再判断$d_i$是否可行。
这么搞复杂度貌似是$O(\dfrac{n^2}{\ln\ n})$的,然而实际上它跑得飞快?
#include<bits/stdc++.h>
#define M 100010
#define L long long
using namespace std; int pri[M]={},las[M]={},id[M]={},use=;
void init(){
for(int i=;i<M;i++){
if(!las[i]) id[pri[++use]=i]=use,las[i]=;
for(int j=;j<=use&&i*pri[j]<M;j++){
las[i*pri[j]]=i;
if(i%pri[j]==) break;
}
}
} L a[M]={},sum[M]={},now[M]={};
int ansx[M]={},ansy[M]={},cnt=,top=;
bool cmp(){
for(int i=top;i;i--)
if(sum[i]<now[i]) return ;
return ;
} int main(){
init(); top=use;
int n; scanf("%d",&n);
for(int i=n,x;i;i--) scanf("%d",&x),a[x]++;
for(int i=M-;i;i--) a[i]+=a[i+];
for(int i=M-;i;i--){
for(int j=i;j>;j=las[j]){
int p=id[j/las[j]];
sum[p]+=a[i],now[p]++;
}
}
for(int i=M-;i>;i--){
if(cmp()){
L mns=M;
for(int j=top;j;j--) if(now[j]) mns=min(mns,sum[j]/now[j]);
for(int j=top;j;j--) sum[j]-=now[j]*mns;
cnt++; ansx[cnt]=i; ansy[cnt]=mns;
}
for(int j=i;j>;j=las[j]){
int p=id[j/las[j]];
now[p]--;
}
while(top&&now[top]==) top--;
}
printf("%d\n",cnt);
for(int i=;i<=cnt;i++) printf("%d %d\n",ansx[i],ansy[i]);
}
【xsy2815】净空 大暴力的更多相关文章
- 大暴力——[HAOI]2012音量调节
题目:[HAOI]2012音量调节 描述: 问题描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里 ...
- BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】
1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1689 Solved: 1335[Submit][St ...
- 牛客网 暑期ACM多校训练营(第二场)J.farm-STL(vector)+二维树状数组区间更新、单点查询 or 大暴力?
开心.jpg J.farm 先解释一下题意,题意就是一个n*m的矩形区域,每个点代表一个植物,然后不同的植物对应不同的适合的肥料k,如果植物被撒上不适合的肥料就会死掉.然后题目将每个点适合的肥料种类( ...
- bzoj 3489: A simple rmq problem k-d树思想大暴力
3489: A simple rmq problem Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 551 Solved: 170[Submit][ ...
- Vijos P1786 质因数分解【暴力】
质因数分解 背景 NOIP2012普及组第一题 描述 已知正整数n是两个不同的质数的乘积试求出较大的那个质数. 格式 输入格式 输入只有一行包含一个正整数n. 输出格式 输出只有一行包含一个正整数p, ...
- CDOJ 1292 卿学姐种花 暴力 分块 线段树
卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一 ...
- [OpenJudge8786][暴力DP]方格取数
方格取数 总时间限制: 1000ms 内存限制: 65536kB [描述] 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): ...
- 美团2018年CodeM大赛-资格赛 分数 暴力模拟
链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...
- thusc2016游记&&滚粗记&&酱油记
#include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...
随机推荐
- 使用hibernate从一方获取多方信息时报错:org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
引起原因:hibernate加载关联对象的方式有懒加载方式和立即加载方式. 如果在多对一的配置中没有指定加载方式,而一对多的配置中指定了懒加载方式,因此在获取一方是可获取到值,而获取多方时sessio ...
- verilog中的多维数组
reg arrayb [7:0] [0:255] ;//二维数组.
- Java理论学时第三节。课后作业。
如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算? 运行结果. 根据我的总结,它们三个的优先级是:构造方法 > 字段初始值 > 初始化块. 当多个类之间有继承关系 ...
- Java案例:随机点名器
案例介绍: 随机点名器,即在全班同学中随机的找出一名同学,打印这名同学的个人信息.需具备以下3个内容:1)存储所有同学姓名2)总览全班同学姓名3)随机点名其中一人,打印到控制台 案例需求分析: 全班同 ...
- POJ3104--Drying(Binary Search)
It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She ...
- 【MySQL】死锁问题分析
1.MySQL常用存储引擎的锁机制: MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 ...
- Lombok自定义annotation扩展含Intellij插件
Lombok简介 Lombok(https://projectlombok.org/) 提供了以注解的形式为java对象增加属性和方法,这使得原来冗长的java源文件变的简洁(不需要再使用ide去生 ...
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...
- C语言中:static与extern对变量和函数的作用
1.两者对全局变量 static对全局变量,表示定义一个内部变量 extern对全局变量,表示声明一个外部变量 说明: 1.内部变量:定义的变量只能在本文件中访问,不能被其他文件访问. 2.不同文件中 ...
- 《mysql必知必会》学习_第五章_20180730_欢
使用的工具是wamp的Mysql. P29 select prod_name from products; #在表products中选列prod_name,顺寻不是纯粹的随机,但是没有说明排列顺序, ...