CodeForces 402D Upgrading Array
来源:互联网 发布:淘宝智能旺铺又什么用 编辑:程序博客网 时间:2024/05/17 08:49
http://codeforces.com/problemset/problem/402/D
题意:
给了一串序列,计算出这个序列最小的
思路:
首先要看出所定义的
那么如果要使最后序列的总和最小说明要让每个元素的好的素数尽可能的大,坏的素数尽可能的小。
因为可以进行除以gcd的操作,可以先求出1~r的gcd记录下来。因为前面的gcd肯定是不小于后面的gcd的,所以要从后往前判断是否要进行这个操作,不然前面进行这个操作之后后面有可能不能进行。
对于每个当前位置要判断是否要进行这个操作。要让这些数的好素数多,坏素数少,那么就可以判断当前要除掉的这个gcd可以分解成几个好素数几个坏素数,如果坏的多于好的,就将前面的数都除掉这个gcd(除掉的同时记得前面的gcd也要除掉这个gcd),这样就减少了坏的个数。少于就不除,相等话都可以,不影响结果。。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;#define M 50009#define N 1000000009int dp[M];int a[M];int n,m;map<int,int> bad;int gcd(int a,int b){ if(b == 0) return a; return gcd(b,a%b) ;}int cal(int a) //分解质因数。{ int sum = 0; for(int i = 2;i*i <= a;i++) { while(a % i == 0) { if(bad[i]) sum--; else sum++; a /= i; } } if(a != 1) //不要漏了最后还是素数的情况,调了十年。。 { if(bad[a]) sum--; else sum++; } return sum;}int main(){ while(scanf("%d %d",&n,&m)==2) { bad.clear(); for(int i = 0;i < n;i++) { scanf("%d",&a[i]); } dp[0] = a[0]; dp[1] = gcd(a[0],a[1]); for(int i = 2;i < n;i++) { dp[i] = gcd(dp[i-1],a[i]); } for(int i = 0;i < m;i++) { int temp; scanf("%d",&temp); bad[temp]++; } for(int i = n-1;i >= 0;i--) { int p = dp[i]; int temp = cal(dp[i]); if(temp < 0) { for(int j = i;j >= 0;j--) { a[j] /= p; dp[j] /= p; } } } int sum = 0; for(int i = 0;i < n;i++) { sum += cal(a[i]); } printf("%d\n",sum); } return 0;}
0 0
- CodeForces 402D Upgrading Array
- CodeForces 402D Upgrading Array
- CodeForces 402D Upgrading Array
- codeforces 402D D. Upgrading Array
- codeforces 402D D. Upgrading Array(dp+数论)
- CF 402D Upgrading Array
- Codeforces Round #236 (Div. 2) D. Upgrading Array
- Codeforces Round #236 (Div. 2)D题 Upgrading Array ;dp
- Codeforces 403B Upgrading Array [贪心] [数论]
- CF:402D - Upgrading Array 数分解为素数之积滴判定
- 【CODEFORCES】 D. Interesting Array
- 【Codeforces403B】【贪心】Upgrading Array
- 2015年ALPC暑期代码能力练习I D Upgrading Array
- Codeforces 86D. Powerful array
- Codeforces 86D:Powerful array
- CodeForces 624D Array GCD
- codeforces 86 D Powerful array
- CODEFORCES, 483D Interesting Array
- linux下创建oracle用户表空间
- Android应用程序组件(二)
- 邻接矩阵实现代码
- 黑马程序员-[C语言-指针和文件操作]学习日记(四)
- mysql日志类型分析
- CodeForces 402D Upgrading Array
- android源码目录结构
- PAT 1056. Mice and Rice (25)
- 微信SDK开发学习第三课
- 九度oj 1115
- Java中的内部类
- MySql 5.6 数据单向同步详细步骤(亲测成功同步)
- iOS-Animation学习2-CABasicAnimation以及CAAnimationGroup的基本用法
- 最大类间方差算法