传送门

唉我觉得这题数据范围1e5都能做啊。。。

居然只出了2000

考完听zxyzxyzxy说我的贪心可以卡但过了?

可能今天本来是0+10+00+10+00+10+0只是运气好T1T1T1骗了100pts100pts100pts吧233.

下面讲讲贪心:

令wi=∏i=1kpiaiw_i=\prod_{i=1}^kp_i^{a_i}wi​=∏i=1k​piai​​

令A=∑aipi是好质数,B=∑ai,pi是坏质数A=\sum_{a_i} p_i是好质数,B=\sum_{a_i},p_i是坏质数A=∑ai​​pi​是好质数,B=∑ai​​,pi​是坏质数

那么fi=A−Bf_i=A-Bfi​=A−B

令gi=gcd(w1,w2,...,wi)g_i=gcd(w_1,w_2,...,w_i)gi​=gcd(w1​,w2​,...,wi​)

考虑j&lt;ij&lt;ij<i

有gi∣gjg_i|g_jgi​∣gj​

令k=gjgik=\frac {g_j} {g_i}k=gi​gj​​

那么有fgj=fk+fgif_{g_j}=f_k+f_{g_i}fgj​​=fk​+fgi​​

所以如果先在iii那个地方进行一次操作,无论怎么样都不会令结果变小。

于是我们从后向前算出所有有正的贡献的iii加到答案里面就行了。

代码:

#include<bits/stdc++.h>
#include<tr1/unordered_map>
using namespace std;
const int N=32005;
int n,m,pri[N],a[5005],b[5005],tot=0,sum=0,ans=0;
bool vis[N];
tr1::unordered_map<int,int>S;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
inline void init(){
	for(int i=2;i<=N-5;++i){
		if(!vis[i])pri[++tot]=i;
		for(int j=1;j<=tot&&i*pri[j]<=N-5;++j){
			int k=i*pri[j];
			vis[k]=1;
			if(i%pri[j]==0)break;
		}
	}
}
inline int calc(int x){
	int ret=0;
	for(int i=1;i<=tot&&pri[i]*pri[i]<=x;++i){
		if(x==1)break;
		if(x!=x/pri[i]*pri[i])continue;
		int cnt=0;
		while(x==x/pri[i]*pri[i])++cnt,x/=pri[i];
		if(S[pri[i]])ret-=cnt;
		else ret+=cnt;
	}
	if(x^1){
		if(S[x])--ret;
		else ++ret;
	}
	return ret;
}
int main(){
	init();
	n=read(),m=read(),S.clear();
	for(int i=1;i<=n;++i)a[i]=read();
	for(int i=1;i<=m;++i)S[read()]=1;
	for(int i=1;i<=n;++i){
		sum+=calc(a[i]);
		if(i^1)a[i]=__gcd(a[i],a[i-1]);
		b[i]=-calc(a[i]);
	}
	int pos=n,delta=0;
	while(pos){
		if(b[pos]-delta>0)sum+=(b[pos]-delta)*pos,delta+=b[pos]-delta;
		--pos;
	}
	cout<<sum;
	return 0;
}

2018.10.27 codeforces402D. Upgrading Array(数论+贪心)的更多相关文章

  1. 2018.10.27 loj#6035. 「雅礼集训 2017 Day4」洗衣服(贪心+堆)

    传送门 显然的贪心题啊...考试没调出来10pts滚了妙的一啊 直接分别用堆贪心出洗完第iii件衣服需要的最少时间和晾完第iii件衣服需要的最少时间. 我们设第一个算出来的数组是aaa,第二个是bbb ...

  2. 2018.10.27 bzoj1984: 月下“毛景树”(树链剖分)

    传送门 唉蒟蒻又退化了,这道sb题居然做了20min,最后发现是updcovupdcovupdcov写成了updaddupdaddupdadd我还能说什么233233233 就是让你转边权为点权之后, ...

  3. Codeforces 402D Upgrading Array:贪心 + 数学

    题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...

  4. 2018.10.27 bzoj3209: 花神的数论题(数位dp)

    传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...

  5. 2018.10.27 洛谷P2915奶牛混合起来Mixed Up Cows(状压dp)

    传送门 状压dp入门题. 按照题意建一个图. 要求的就是合法的链的总数. 直接f[i][j]f[i][j]f[i][j]表示当前状态为jjj,下一位要跟iii连起来的方案数. 然后从没被选并且跟iii ...

  6. 2018.10.27 loj#2292. 「THUSC 2016」成绩单(区间dp)

    传送门 g[i][j][k][l]g[i][j][k][l]g[i][j][k][l]表示将区间l,rl,rl,r变成最小值等于kkk,最大值等于lll时的花费的最优值. f[i][j]f[i][j] ...

  7. 2018.10.26 poj3421X-factor Chains(数论+排列组合)

    传送门 排列组合入门题. 令X=p1a1p2a2..pkakX=p_1^{a_1}p_2^{a_2}..p_k^{a_k}X=p1a1​​p2a2​​..pkak​​ 那么答案1就等于∑i=1kai\ ...

  8. 2018.10.21 codeforces1071A. Cram Time(贪心构造)

    传送门 直接先看最多能够凑出几个. 然后可以得到一个结论就是如果保证所有页数之和是小于等于A+BA+BA+B的一定都对应着一种合法方案. 如何构造? 我们对于第一天的AAA个小时,从大向小选,如果当前 ...

  9. POI 2018.10.27

    [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进 ...

随机推荐

  1. TOJ3216 我要4444

    传送门  http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3216 时间限制(普通/Java) ...

  2. console报错:No mapping found for HTTP request with URI(xxx)

    console报错:No mapping found for HTTP request with URI(xxx) 报错可能原因: 1;contorl未加载成功 2;资源访问失败(所有访问全部被Dis ...

  3. javascript简单的滑动效果

    利用setInterval实现简单的滑动效果 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. 【svn】服务器搭建和迁移

    导语 svn客户端大部分开发都会用到,但是为什么我们仍然需要svn服务端呢? 理由可能有: 1,我们想存放一些属于自己的文档,而不像被其他人发现(在自己的网络环境中,安全性更高,更易用,不依赖于公司, ...

  5. 2017-2018-2 20165315 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165315 实验二<Java面向对象程序设计>实验报告 一.实验内容及步骤 1.初步掌握单元测试和TDD 单元测试 任务一:三种代码 用程序解决问题时,要学会 ...

  6. Java_7 ArrayList集合

    1 ArrayList创建变量的步骤 1: 导入包 java.util包中 2: 创建引用类型的变量 数据类型< 集合存储的数据类型> 变量名 = new 数据类型<集合存储的数据类 ...

  7. WEB框架Django之中间件/缓存/CBV/信号

    一Djano的中间件 1 中间件的概念 中间件顾名思义,是介于request与respose处理之间的一道处理过程,相对比较轻量级,并且全局上改变django的输入与输出.因为改变是全局, 所有需要谨 ...

  8. Beanstalkd消息队列的安装与使用

    一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...

  9. Bootstrap 框架 day57

    Bootstrap框架  Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包 ...

  10. 函数的有用信息,装饰器 day12

    一 函数的有用信息 本函数的功能:绘图功能,实时接收数据并绘图.:return: 绘图需要的数据,返回给前端某标签 def f1(): ''' 本函数的功能:绘图功能,实时接收数据并绘图. :retu ...