Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]
PROBLEM D - Round Subset
题
OvO http://codeforces.com/contest/837/problem/D
837D
解
DP,
dp[i][j]代表已经选择了i个元素,当2的个数为j的时候5的个数的最大值
得注意最大值(貌似因为这个喵呜了一大片喵~☆)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm> using namespace std; typedef long long ll; const int M=64*202;
const int N=M-2; int n,k;
int f[222][M]; //f[i][j] used num=i, sum of k2=j, val of f[i][j] = max sum of k5
int k2[222],k5[222]; void init()
{
memset(k2,0,sizeof(k2));
memset(k5,0,sizeof(k5));
memset(f,-1,sizeof(f));
} int main()
{
int i,j,t;
ll tmp;
cin>>n>>k;
init();
for(i=1;i<=n;i++)
{
scanf("%I64d",&tmp);
while(tmp%2==0)
tmp/=2,k2[i]++;
while(tmp%5==0)
tmp/=5,k5[i]++;
}
f[0][0]=0;
for(i=1;i<=n;i++)
for(j=k;j>=1;j--)
for(t=N;t>=k2[i];t--)
if(f[j-1][t-k2[i]]!=-1)
f[j][t]=max(f[j][t],f[j-1][t-k2[i]]+k5[i]);
int ans=0;
for(t=0;t<=N;t++)
ans=max(ans,min(t,f[k][t]));
cout<<ans<<endl;
return 0;
}
PROBLEM E - Round Subset
题
OvO http://codeforces.com/contest/837/problem/E
837E
解
当B和A公约数不为1的时候(开始的时候,或者B减了一定次数1的时候),就相当于A和B同除以gcd(A,B),然后B继续一次减1。
这样只要每次计算出每次B要减多少次1才能和A有不为1的公约数。
那么预处理出A的质因数,然后每次对A的质因数判断一下,哪个最近(也就是模最小)即可。
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cstdio> using namespace std; typedef long long ll; const ll M=1e6+44;
const ll inf=1e18; ll A,B;
ll prim[M];
ll lp,nump[M];
ll ans; void init(ll spl)
{
ll i,j;
lp=0;
for(i=2;i*i<=spl;i++)
if(spl%i==0)
{
prim[++lp]=i;
nump[lp]=0;
while(spl%i==0)
spl/=i,nump[lp]++;
}
if(spl!=1)
{
prim[++lp]=spl;
nump[lp]=1;
}
} void deal()
{
if(B==0)
return ;
if(A==1)
{
ans+=B;
return ;
}
ll i,j,mn;
ll tmp,gcd;
mn=inf;
for(i=1;i<=lp;i++)
{
tmp=B%prim[i];
if(tmp<mn)
mn=tmp;
}
tmp=mn;
ans+=tmp;
B-=tmp;
gcd=__gcd(A,B);
A/=gcd; B/=gcd;
for(i=1;i<=lp;i++)
if(gcd%prim[i]==0)
{
while(gcd%prim[i]==0)
gcd/=prim[i],nump[i]--;
if(nump[i]==0)
{
swap(nump[i],nump[lp]);
swap(prim[i],prim[lp]);
lp--; i--;
}
}
deal();
} void solve()
{
ans=0;
deal();
printf("%I64d\n",ans);
} int main()
{
scanf("%I64d%I64d",&A,&B);
init(A);
solve();
return 0;
}
PROBLEM F - Prefix Sums
题
OvO http://codeforces.com/contest/837/problem/F
837F
解
由于新生成的m+1个数列第一个肯定为0,所以可以忽略掉,当作每次新生成的数列只拥有m个元素
然后 举个栗子
当s={1,0,0,0,0} 可以得到如下矩阵

显然这拥有某神秘三角的性质
然后二分答案,每次通过组合数来算就行了,由于太大直接退出,所以不会超时(如果C(p,q),p-q<q的话,转化为C(p,p-q))
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio> using namespace std; typedef long long ll; const ll M=2e5+44; ll n,k;
ll sum;
ll s[M]; bool check(ll spl)
{
ll i,j,t,x,y,p,q;
double sum=0,tmp;
for(t=0;t<n;t++)
{
if(s[t]==0) continue;
x=spl; y=(n-1)-t; //s[i]*c(y+x-1,x-1)
p=x-1; q=x+y-1; //c(q,p)
p=min(q-p,p);
tmp=s[t];
for(i=q,j=p;j>=1;j--,i--)
{
tmp=tmp*i/j;
if(tmp>=k)
return true;
}
sum+=tmp;
if(sum>=k) return true;
}
return false;
} void solve()
{
ll li=0,ri=k,mid;
while(li<ri-1)
{
// cout<<li<<' '<<ri<<endl;
mid=(li+ri)>>1;
if(check(mid))
ri=mid;
else
li=mid;
}
cout<<ri<<endl;
} int main()
{
ll i,j,tmp;
cin>>n>>k;
for(i=0;i<n;i++)
{
scanf("%I64d",&s[i]);
if(s[i]>=k)
{
printf("0\n");
return 0;
}
}
solve();
return 0;
}
Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]的更多相关文章
- 【动态规划】【滚动数组】Educational Codeforces Round 26 D. Round Subset
给你n个数,让你任选K个,使得它们乘起来以后结尾的0最多. 将每个数的因子2和因子5的数量求出来,记作a[i]和b[i]. 答案就是max{ min{Σa[i],Σb[i]} }(a[i],b[i]是 ...
- Educational Codeforces Round 26 F. Prefix Sums 二分,组合数
题目链接:http://codeforces.com/contest/837/problem/F 题意:如题QAQ 解法:参考题解博客:http://www.cnblogs.com/FxxL/p/72 ...
- CodeForces 837D - Round Subset | Educational Codeforces Round 26
/* CodeForces 837D - Round Subset [ DP ] | Educational Codeforces Round 26 题意: 选k个数相乘让末尾0最多 分析: 第i个数 ...
- Educational Codeforces Round 26
Educational Codeforces Round 26 困到不行的场,等着中午显示器到了就可以美滋滋了 A. Text Volume time limit per test 1 second ...
- CodeForces 837F - Prefix Sums | Educational Codeforces Round 26
按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforc ...
- CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26
/* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...
- Educational Codeforces Round 58 (Rated for Div. 2) 题解
Educational Codeforces Round 58 (Rated for Div. 2) 题目总链接:https://codeforces.com/contest/1101 A. Min ...
随机推荐
- hadoop集群搭建及易踩坑收录
配置前先把域名映射配好哈 详情参考我的其他随笔(哪里不通可以在下方评论) 下载好hdfs.tar.gz 后 在/home/ldy下 mkdir apps/ tar -xzvf hdfs.tar.gz ...
- 小白简单快速搭建lnmp环境(centos7)
本来想着自己搭建lnmp,由于php包下载不下来因此这次本人使用的lnmp一键包搭建的环境(很遗憾还没有php7.3.5)很详细并且方便快捷网址https://lnmp.org/install.htm ...
- 201709-3 JSON查询
问题描述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,可以用来描述半结构化的数据.JSON 格式中的基本单元是值 (value),出于简化的目的本题 ...
- Linux磁盘挂载、分区、扩容操作
本文最早发布于 Rootrl's blog 注:以下操作系统环境为CentOS7 基本概念 在操作前,首先要了解一些基本概念 磁盘 在Linux系统中所有的设备都会以文件的形式存储.设备一般保存在/d ...
- 数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)
数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization) 2015年12月27日 18:51:19 下一步 阅读数 43 ...
- C#面向对象9 字符串
1.字符串的不可变性 当你给一个字符串重新赋值之后,老的值并没有销毁,而是重新开辟了一块空间(堆)存储新的值. **当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁. 示意图 ...
- Windows 7 系统下显示文件类型的扩展名和隐藏文件
一.显示扩展名 点击开始菜单 在搜索框中输入「文件夹选项」并单击 切换到「查看」栏,取消勾选「隐藏已知文件类型的扩展名」这一项 设置完成 ps: 你也可以通过单击下图位置进行相应操作来达到同样的效果 ...
- Windows环境用Xampp自制证书(certificate), Chrome(版本 60.0.3112.90通过)
标题: Self signed certificate no longer valid as of Chrome 58(Chrome58以后自制证书不再有效)原文地址: https://github. ...
- 第一章·ELKstack介绍及Elasticsearch部署
一.ELKstack课程大纲  二.ELKstack简介 什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana 三个开源软件的组成的一个组合体,这三个软件当 ...
- Oracle子句【group by、having】
[分组查询]关键字:group by 分组字段名,分组字段名... --注意1:分组后,在select语句中只允许出现分组字段和多行函数 --注意2:如果是多字段分组,先按第一字段分组,然后每个小组继 ...