CF-1114 (2019/02/11)
CF-1114
A. Got Any Grapes?
skip
B. Yet Another Array Partitioning Task
- 将n个数分成连续的k组,使得每组的前m大的数字的总和最大。
- 首先可以想到肯定可以包含n个数中前 m*k 大的数。所以可以先将他们标记,然后扫一遍确定每组的端点即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,k;
struct node{
int x;
int id;
}a[200010];
int v[200010];
bool cmp(node a,node b){
return a.x>b.x;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
scanf("%d",&a[i].x);
a[i].id = i;
}
sort(a+1,a+n+1,cmp);
ll sum = 0;
for(int i=1;i<=m*k;i++){
v[a[i].id] = 1;
sum += a[i].x;
}
vector<int> ans;
int num = 0;
for(int i=1;i<=n;i++){
if(v[i])num++;
if(num==m){
ans.push_back(i);num=0;
if(ans.size()==k-1)
break;
}
}
cout<<sum<<endl;
for(int i=0;i<k-1;i++)
cout<<ans[i]<<' ';
puts("");
return 0;
}
C. Trailing Loves (or L'oeufs?)
- $ n! = p_1^{x_1} \cdot p_2^{x_2}\cdots p_m^{x_m} \cdot Q$
- \(b = p_1^{y_1} \cdot p_2^{y_2} \cdots p_m^{y_m}\)
分解n!的质因数复杂度为 O(log N)。所以我们可以将b分解质因数,对于质因数\(p_i\),计算n!含有多少个质因子\(p_i\) (设\(x_i\)) ,则该质因子下答案为 \(\lfloor x_i/y_i \rfloor\) , 最终\(ans = min \{ \lfloor x_1/y_1 \rfloor \cdots \lfloor x_m/y_m\rfloor \}\)
- 计算n!中含有多少个\(p_i\) 时,可以这样计算:
- 首先在1到n的排列中肯定有\(\lfloor n/p_i \rfloor\)个包含质因子\(p_i\)的数,同理也有\(\lfloor x/{p_i^2}\rfloor\) 个含有两个\(p_i\)的数,不过其中的一个质因子已经在\(\lfloor n/p_i \rfloor\)中统计过,所以只需要再统计第二个质因子,即累加上\(\lfloor x/{p_i^2}\rfloor\),而不是\(2*\lfloor x/{p_i^2}\rfloor\)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = LONG_LONG_MAX;
ll n,b;
ll calc(ll p,ll cnt){
//res为上述xi
ll res = 0,base = 1;
for(;base<=n/p;){
base*=p;
res += n/base;
}
/*写成下面这样会爆
for(base=x;base<=n;base*=x){
res += n/base;
}*/
return res/cnt;
}
int main(){
cin>>n>>b;
ll ans = inf;
//分解质因数
for(ll i=2;i*i<=b;i++){
if(b%i==0){
ll cnt = 0;//cnt为上述yi
while(b%i==0)b/=i,cnt++;
ans = min(ans,calc(i,cnt));
}
}
if(b>1) ans = min(ans,calc(b,1));
cout<<ans<<endl;
}
D. Flood Fill
- (又是一个没见过的区间DP,题解里面说可以倒过来LCS,相当于求最长回文子序列,不过我还没搞懂
d[i][j][0]表示区间[i,j]所有数字与a[i]相同时所需要的最少改变次数,d[i][j][1]表示与a[j]相同。复杂度为\(O(n^2)\)- 每次转移只能向左或者向右移动一格,细节看代码吧
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
int n;
int a[5050];
int dp[5050][5050][2];
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
if(n==1){
puts("0");return 0;
}
memset(dp,0x3f,sizeof dp);
for(int i=1;i<=n;i++)dp[i][i][0] = dp[i][i][1] = 0;
for(int i=n;i>=1;i--){
for(int j=i;j<=n;j++){
for(int k=0;k<2;k++){
//c为标准
int c = k==0?a[i]:a[j];
if(j<n)
dp[i][j+1][1] = min(dp[i][j+1][1],dp[i][j][k]+(a[j+1]==c?0:1));
if(i>1)
dp[i-1][j][0] = min(dp[i-1][j][0],dp[i][j][k]+(a[i-1]==c?0:1));
}
}
}
cout<<min(dp[1][n][0],dp[1][n][1])<<endl;
}
CF-1114 (2019/02/11)的更多相关文章
- 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)
传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...
- 2019.02.11 bzoj3165: [Heoi2013]Segment(线段树)
传送门 题意简述:要求支持两种操作: 插入一条线段. 询问与直线x=kx=kx=k相交的线段中,交点最靠上的线段的编号. 思路: 直接上李超线段树即可. 代码: #include<bits/st ...
- 2019.02.11 bzoj4818: [Sdoi2017]序列计数(矩阵快速幂优化dp)
传送门 题意简述:问有多少长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数,且其中至少有一个数是质数,答案对201704082017040820170408取模(n≤1e9, ...
- 2019.02.11 bzoj4767: 两双手(组合数学+容斥dp)
传送门 题意简述:你要从(0,0)(0,0)(0,0)走到(ex,ey)(ex,ey)(ex,ey),每次可以从(x,y)(x,y)(x,y)走到(x+ax,y+ay)(x+ax,y+ay)(x+ax ...
- 2019年11个javascript机器学习库
Credits: aijs.rocks 虽然python或r编程语言有一个相对容易的学习曲线,但是Web开发人员更喜欢在他们舒适的javascript区域内做事情.目前来看,node.js已经开始向每 ...
- 梦想MxWeb3D协同设计平台 2019.02.28更新
梦想MxWeb3D协同设计平台 2019.02.28更新 SDK开发包下载地址: http://www.mxdraw.com/ndetail_10130.html 在线演示网址: http://www ...
- tmux使用——2019年11月20日16:40:15
1.tmux 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令.用户与计算机的这种临时的交互,称为一次"会话& ...
- 打开随身U盘_办公专用盘 2019年11月29日
;;; ; 打开随身U盘_办公专用盘 2019年11月29日 ; https://www.autoahk.com/?p=16553; https://www.cnblogs.com/delphixx/ ...
- 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写
'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...
随机推荐
- postman的安装和使用方法详解
文章来源:http://www.cnplugins.com/tool/specify-postman-methods.html 非官网安装 这是一种直接通过打包已经安装的扩展程序的方式,来进行我认为的 ...
- css布局全总结
一 居 中 布 局 水平居中 1. 使用inline-block+text-align(1)原理.用法 原理:先将子框由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中. 用法:对子 ...
- Unity 打包PC和安卓的路径注意事项
if UNITY_STANDALONE_WIN || UNITY_EDITOR return Application.persistentDataPath + "/LocalData&quo ...
- python进阶04 装饰器、描述器、常用内置装饰器
python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...
- RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例
你是否听说过或者使用过队列? 你是否听说过或者使用过消息队列? 你是否听说过或者使用过RabbitMQ? 提到这几个词,用过的人,也许觉得很简单,没用过的人,也许觉得很复杂,至少在我没使用消息队列之前 ...
- ML.NET 示例:目录
ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn 英文原版请访问:https://github.com/ ...
- 一道笔试题和UML思想 ~
一句软件工程界的名言,让我想起了一个和一道笔试题有关的故事.希望更多的人了解 UML 背后的思想比他的语法更重要,是笔者写作本文的一点小愿望. 一.从一句软件工程名言说起 对很多事情的处理上,东西方都 ...
- mitmproxy抓包软件在mac上边的安装
官网介绍:mitmproxy is a free and open source interactive HTTPS proxy. mitmproxy 是用 Python 和 C 开发的一个中间人代理 ...
- Jenkins任务失败,发送邮件通知
1.进入系统管理->系统设置,然后进行下面设置: 2.配置管理员邮件账号,需要和后面的邮件发送者一致.否则可能会发送不成功 3.配置基础的邮件发送的配置 4.配置邮件扩展配置--用来自定义邮件格 ...
- mac不限速下载百度网盘
本文转载自:https://blog.csdn.net/u010837612/article/details/80029212 相信大家都比较困惑,百度网盘客户端限速后一般只有几十K的下载速度,Win ...