CF_402D Upgrading Array 因式分解
题目链接:http://codeforces.com/problemset/problem/402/D
- /**算法分析:
- */
- #include<bits/stdc++.h>
- #define MAXN 5005
- #define MAXM 110000
- #define PI acos(-1.0)
- #define REP(i,n) for(int i=0; i<n; i++)
- #define FOR(i,s,t) for(int i=s; i<=t; i++)
- #define mem(a,b) memset(a,b,sizeof(a))
- #define show(x) { cerr<<">>>"<<#x<<" = "<<x<<endl; }
- #define showtwo(x,y) { cerr<<">>>"<<#x<<"="<<x<<" "<<#y<<" = "<<y<<endl; }
- using namespace std;
- int prime[MAXM],prime_index;
- int a[MAXN],gcd[MAXN];
- int n,m;
- set<int> badset;
- map<int,int> vis;
- void get_prime()
- {
- prime_index = ;
- bool flag[MAXM]; mem(flag,);
- FOR(i,,MAXM-)
- {
- if(!flag[i])
- {
- prime[prime_index++] = i;
- for(int j=i+i; j<MAXM; j+=i)
- flag[j] = true;
- }
- }
- }
- int F(int s)
- {
- int ret = ,rcd = s; //这个rcd十分重要,注意改变的数如果还要操作就需要记录
- if(badset.count(s)) return -;
- if(vis.find(s) != vis.end()) return vis[s];
- //进行因式分解,一种预处理出质数,另一种直接sqrt(n);
- /**
- for(int i=0; i < prime_index && prime[i]*prime[i] <= s; i++)
- {
- int p = prime[i];
- if(s % p == 0)
- {
- int isbad;
- if(badset.count(p)) isbad = -1;
- else isbad = 1;
- while(s % p == 0) ret += isbad, s /= p;
- }
- }
- */
- for(int i=; i*i <= s; i++)
- {
- int p = i;
- if(s % p == )
- {
- int isbad;
- if(badset.count(p)) isbad = -;
- else isbad = ;
- while(s % p == ) ret += isbad, s /= p;
- }
- }
- if(s != )
- {
- if(badset.count(s)) ret--;
- else ret++;
- }
- return vis[rcd] = ret;
- }
- int main()
- {
- // freopen("E:\\acm\\input.txt","r",stdin);
- // get_prime();
- cin>>n>>m;
- FOR(i,,n) scanf("%d",&a[i]);
- FOR(i,,m)
- {
- int tmp; scanf("%d",&tmp);
- badset.insert(tmp);
- }
- int ans = ;
- gcd[] = a[];
- FOR(i,,n)
- {
- ans += F(a[i]);
- gcd[i] = __gcd(gcd[i-],a[i]);
- }
- int decr = ;
- for(int i=n; i>=; i--)
- {
- int cur_f = F(gcd[i]) + decr;
- if(cur_f < )
- {
- ans -= cur_f * i;
- decr -= cur_f;
- }
- }
- cout<<ans<<endl;
- }
CF_402D Upgrading Array 因式分解的更多相关文章
- codeforces Upgrading Array
思路:对于每个数分解质因子然后记录每一个质因子的个数,对与在b中出现的质因子就减去1,否则加1,求出总的,然后从后面一次对它们的最大公约数,然后判断除以最大公约数之后,改变量是不是变化,求最大值,变化 ...
- Codeforces 494D Upgrading Array
http://codeforces.com/contest/494/problem/D 题意:给一个数组,和一个坏质数集合,可以无数次地让1到i这些所有数字除以他们的gcd,然后要求Σf(a[i])的 ...
- CF402D Upgrading Array
原题链接 先用素数筛筛下素数,然后考虑贪心去操作. 先求前缀\(GCD\)(求到\(GCD\)为\(1\)就不用再往下求了),得到数组\(G[i]\),然后从后往前扫,如果\(f(G[i]) < ...
- 2018.10.27 codeforces402D. Upgrading Array(数论+贪心)
传送门 唉我觉得这题数据范围1e5都能做啊... 居然只出了2000 考完听zxyzxyzxy说我的贪心可以卡但过了? 可能今天本来是0+10+00+10+00+10+0只是运气好T1T1T1骗了10 ...
- CodeForces 402D Upgrading Array (数学+DP)
题意:给出一个数列,可以进行一种操作将某一个前缀除去他们的gcd,有一个函数f(x),f(1) = 0 , f(x) = f(x/p)+1,f(x) = f(x/p)-1(p是坏素数), 求 sum( ...
- Codeforces 402D Upgrading Array:贪心 + 数学
题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...
- 【Henu ACM Round#17 F】Upgrading Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...
- codeforces 402 D. Upgrading Array(数论+贪心)
题目链接:http://codeforces.com/contest/402/problem/D 题意:给出一个a串和素数串b .f(1) = 0; p为s的最小素因子如果p不属于b , 否则 . a ...
- CF402D 【Upgrading Array】
题目链接: CF402D 题目分析: 首先考虑一下怎么求每个数的分数.把每个数分解到最后会发现它的坏质因子对它分数的贡献是\(-1\),好质因子对它分数的贡献是\(1\),那么最后的分数就是好质因数- ...
随机推荐
- 数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间
数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间 1.题目中要求我们不能使用额外的空间,那么我们能采用在原数组上做文章,这里的重点是如何 ...
- c++ 重定位输出到DOS
#define USE_WIN32_CONSOLE int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTST ...
- sjtu1333 函数时代
Description Taring说:生活的过程就是执行函数的过程.需要命令,也需要回报.更重要的,是得到回报的过程. 好吧...这道题其实和上面的也没啥关系TAT,我们要求的是下面的问题: 给定\ ...
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
http://blog.csdn.net/fox123871/article/details/8165431 session是工作在你的应用程序进程中的.asp.net进程.iis往往会在20分钟之后 ...
- ZOJ 3170 Friends
点我看题目 题意 : 就是有n个人,m对关系,每对关系的两个人是好朋友,这个关系是相互的,如果有两个人的共同好朋友超过k个,那这两个人也会是好朋友的,给你m对关系,给你足够长的时间,问你还能增加几对关 ...
- java客户端连接MongoDB数据库的简单使用
1.下载mongoDB的jar包,并引入到工程的CLASSPATH中下载:mongodb2.5驱动包下载 如果使用maven项目,最新的依赖如下: <dependency> <gro ...
- UVA 658 It's not a Bug, it's a Feature!
这个题目巧妙之处在于用二进制的每个位1,0分别表示bug的有无,以及实施补丁对相应bug的要求以及实施后的对bug的影响. 软件bug的状态:1表示相应bug仍然存在,0表示已经修复.这样可以将软件的 ...
- Spring事务管理--多个ORM框架在使用时的情况分析
公司的项目已经接近尾声了,总结一下项目中用到的技术,我发现项目中的有些东西还是挺模糊的,只是知道这么用就行了.并不清楚其中的原理.由于公司的项目比较老,是7年前的一个项目了,中间一直有人在维护,也是在 ...
- php 模拟斗地主发牌简单易懂
闲来无聊,就写了这个方法,也算是熟悉下php的数组操作,还请各位大神多指教.$arr 数组,好像有点问题,应该 2=>'方片2',3=>'梅花2',4=>'红心2',5=>'黑 ...
- 【HDOJ】1069 Monkey and Banana
DP问题,我是按照边排序的,排序既要考虑x也要考虑y,同时在每个面中,长宽也要有序.还有注意状态转移,当前高度并不是之前的最大block叠加的高度,而是可叠加最大高度+当前block高度或者是当前bl ...