2018.10.27 codeforces402D. Upgrading Array(数论+贪心)
传送门
唉我觉得这题数据范围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=1kpiai
令A=∑aipi是好质数,B=∑ai,pi是坏质数A=\sum_{a_i} p_i是好质数,B=\sum_{a_i},p_i是坏质数A=∑aipi是好质数,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<ij<ij<i
有gi∣gjg_i|g_jgi∣gj
令k=gjgik=\frac {g_j} {g_i}k=gigj
那么有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(数论+贪心)的更多相关文章
- 2018.10.27 loj#6035. 「雅礼集训 2017 Day4」洗衣服(贪心+堆)
传送门 显然的贪心题啊...考试没调出来10pts滚了妙的一啊 直接分别用堆贪心出洗完第iii件衣服需要的最少时间和晾完第iii件衣服需要的最少时间. 我们设第一个算出来的数组是aaa,第二个是bbb ...
- 2018.10.27 bzoj1984: 月下“毛景树”(树链剖分)
传送门 唉蒟蒻又退化了,这道sb题居然做了20min,最后发现是updcovupdcovupdcov写成了updaddupdaddupdadd我还能说什么233233233 就是让你转边权为点权之后, ...
- Codeforces 402D Upgrading Array:贪心 + 数学
题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...
- 2018.10.27 bzoj3209: 花神的数论题(数位dp)
传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...
- 2018.10.27 洛谷P2915奶牛混合起来Mixed Up Cows(状压dp)
传送门 状压dp入门题. 按照题意建一个图. 要求的就是合法的链的总数. 直接f[i][j]f[i][j]f[i][j]表示当前状态为jjj,下一位要跟iii连起来的方案数. 然后从没被选并且跟iii ...
- 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] ...
- 2018.10.26 poj3421X-factor Chains(数论+排列组合)
传送门 排列组合入门题. 令X=p1a1p2a2..pkakX=p_1^{a_1}p_2^{a_2}..p_k^{a_k}X=p1a1p2a2..pkak 那么答案1就等于∑i=1kai\ ...
- 2018.10.21 codeforces1071A. Cram Time(贪心构造)
传送门 直接先看最多能够凑出几个. 然后可以得到一个结论就是如果保证所有页数之和是小于等于A+BA+BA+B的一定都对应着一种合法方案. 如何构造? 我们对于第一天的AAA个小时,从大向小选,如果当前 ...
- POI 2018.10.27
[POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进 ...
随机推荐
- http://218.245.4.98:20000/phpmyadmin:2018SCTF--easiest web - phpmyadmin
SCTF的web最简单题,好难好难好难. 直接进去就是PHPmyadmin界面(即mysql的网页界面),需要登录密码,这个我当时没有破解出来,谁知道账号密码是root/root咩,要是 ...
- vue-webpack项目本地开发环境设置代理解决跨域问题
前言: 一般跨域问题只要后端配置好的话,是不需要前端做处理的,但也不能保证你遇到的所有后端都能很好的处理这个问题,这个时候可能就需要前端设置代理解决这个问题了. 配置方法: 1. config/ind ...
- Delphi: 模态窗体最小化
源起: 近期所介入的几个项目中,最后视频生成窗体,为一模态对话框.因生成时间可能较长,所以其窗体可以最小化,它最小化时同时最小化主程序,唤醒时主程序再复原. 代码亦是8年前本人所写,一直那样用了,也没 ...
- 浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance
浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance java.lang.reflect.Proxy:该类用于动态生成代理类,只需传入目标接口.目标接口的类加载器以及Inv ...
- selenium验证码和错误截图
验证码的识别: 1,破解验证码 OCR识别(一般使用tesseract-ocr) 人工智能(AI机器学习 TensorFlow,成本大) 2,绕过验证码 1, 让开发人员临时关闭验证码 2,提供万能验 ...
- listView悬浮头部的简单实现
简而言之 为listView设置onScrollListener 当滑动时 firstVisibleItem>=要悬浮的 item的position时 让悬浮部分显示 否则隐藏 其实就是 ...
- IEDriver executable needs to be available in the path
解决办法: 去http://selenium-release.storage.googleapis.com/index.html 下载指定IE版本 解压后 拷贝到Python的目录下 重新运行,提示错 ...
- dangerouslySetInnerHTMl
dangerouslySetInnerHTMl 是React标签的一个属性,类似于angular的ng-bind: 听说这个单词这么长,是故意的,应为有可能不合时宜的使用innerHTML会导致XSS ...
- H5C3动画
1 渐变 /* 渐变:不同颜色之间的柔和过渡 线性渐变:沿着某条直线发生渐变效果 注意:渐变准备来说是一张背景图 语法:linear-gradient */ background-image: lin ...
- HDU 4455.Substrings
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...