Office Keys

首先显然有随人位置的递增,钥匙的位置也要递增,这样考虑两张做法:

1.$f(i,j)$ 表示前i个人,钥匙到第j个最少用的最大时间,然后$O(nK)$ dp

2.二分时间,对于每一个人选择当前能选择的最左面的钥匙 $O((n+K) logn)$

#include <bits/stdc++.h>

#define LL long long

const int N = ;

using namespace std;

int n,m,pre[N],a[N],b[N];

int Abs(int x)
{
if(x<) return -x;
return x;
} int p; bool check(int tim)
{
int j = ;
for(int i=;i<=n;i++)
{
while(j<=m && Abs(a[i]-b[j])+(LL)Abs(b[j]-p) > tim) j++;
if(j>m) return ;
else j++;
}
return ;
} int main()
{
int maxv = ;
scanf("%d%d%d",&n,&m,&p);
maxv = p;
for(int i=;i<=n;i++) scanf("%d",&a[i]), maxv = max(maxv ,a[i]);
for(int i=;i<=m;i++) scanf("%d",&b[i]), maxv = max(maxv, b[i]);
sort(a+,a+n+);
sort(b+,b+m+);
int l=, r=;
for(int i=;i<=n;i++) l = max(l, Abs(p-a[i]));
for(int i=;i<=n;i++) r = max(r, Abs(b[i]-a[i]) + Abs(p-b[i]));
while(r-l>)
{
int mid = (l+(LL)r)>>1LL;
if(check(mid)) r = mid;
else l = mid;
}
for(int i=l;i<=r;i++)
if(check(i))
{
cout<<i<<endl;
break;
}
return ;
}

Cards Sorting

方法1:直接用splay模拟。

方法2:考虑每次删掉当前最小数的代价是上一个最小数和它之间的循环dist,BIT或链表即可。

(取自CF)

#include <bits/stdc++.h>

const int N = ;
#define INF 0x3f3f3f3f
#define LL long long using namespace std; struct node
{
node *ch[];
int v, sum, minv;
int cmp(int x)
{
if(ch[]->sum + == x) return -;
return x > ch[]->sum;
}
node* init(int x);
void update()
{
sum = ch[]->sum + ch[]->sum + ;
minv = min(v, min(ch[]->minv, ch[]->minv));
}
}spT[N], Null, *root; int tot=; node* node::init(int x)
{
v=x;
minv=x;
ch[]=ch[]=&Null;
sum=;
return this;
} node* build(int src[],int l,int r)
{
if(l==r) return spT[++tot].init(src[l]);
int mid=(l+r)>>;
node* tmp=spT[++tot].init(src[mid]);
if(l<mid) tmp->ch[]=build(src,l,mid-);
if(mid<r) tmp->ch[]=build(src,mid+,r);
tmp->update();
return tmp;
} void rot(node* &o,int x)
{
node* tmp=o->ch[x];
o->ch[x]=tmp->ch[x^];
tmp->ch[x^]=o;
o->update();
o=tmp;
o->update();
} void splay(node* &o,int k)
{
int t=o->cmp(k);
if(t==-) return;
if(t) k-=o->ch[]->sum+;
int t1=o->ch[t]->cmp(k);
if(~t1)
{
if(t1) k-=o->ch[t]->ch[]->sum+;
splay(o->ch[t]->ch[t1],k);
if(t1==t) rot(o,t);
else rot(o->ch[t],t1);
}
rot(o,t);
} int find_min(node *&o,int minv,int now)
{
if(o->ch[]->minv == minv) return find_min(o->ch[],minv,now);
else
{
if(o->v == minv) return now+o->ch[]->sum;
return find_min(o->ch[],minv,now+o->ch[]->sum+);
}
} int n,a[N]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
Null.minv = INF;
a[]=INF;
a[n+]=INF;
root = build(a,,n+);
int len = n+;
LL ans = ;
for(int i=;i<=n;i++)
{
int tmp = find_min(root,root->minv,);
ans += (LL)tmp;
splay(root,);
splay(root->ch[],tmp+);
node* tp = root->ch[]->ch[];
root->ch[]->ch[] = &Null;
root->ch[]->update();
root->update(); splay(tp,tp->sum);
tp = tp->ch[];
len--; splay(root,len-tp->sum);
splay(root->ch[],len-tp->sum-);
root->ch[]->ch[] = tp;
root->ch[]->update();
root->update();
}
cout << ans << endl;
return ;
}

Bamboo Partition

显然要满足的条件等价于

$\sum_{i=1}^n { [\frac{a_i + d - 1}{d}] \cdot d - a_i} \leq K$

$F(d) = \sum_{i=1}^n { [\frac{a_i - 1}{d}] + 1} \cdot d  \leq K + \sum {a_i}$

固定 $\sum_{i=1}^n { [\frac{a_i - 1}{d}] + 1}$,从而 $F(d)$ 单调。

对于前者直接找出所有得数相同的 $d$ 的区间,逐一计算即可。

复杂度$O(n^2 \sqrt {a_i} )$

通过调参可以 $O(n \sqrt {a_{max} n})$

#include <bits/stdc++.h>

#define LL long long

const int N = ;

using namespace std;

int n,tot,a[N];
LL K;
vector<int> v; int main()
{
cin>>n>>K;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
K += (LL)a[i];
int j=;
int tmp = a[i]-;
if(tmp>)
{
for(int i=;i<=tmp;i=j+)
j = tmp/(tmp/i), v.push_back(i);
v.push_back(tmp+);
}
}
v.push_back();
sort(v.begin(),v.end());
v.resize(distance(v.begin(), unique(v.begin(), v.end())));
LL ans = , sum;
for(int i=;i<(int)v.size() - ;i++)
{
int l = v[i], r = v[i+]-;
sum = ;
for(int j=;j<=n;j++) sum += (a[j]-1LL)/l + 1LL;
LL tmp = min(K/sum, (LL)r);
if(tmp>=l) ans = tmp;
}
LL l = v[v.size()-];
LL tmp = K/n;
if(tmp >= l) ans = tmp;
cout << ans << endl;
}

cf 424的更多相关文章

  1. CF Round #424 Div.2 D

    n个人拿K个钥匙中的n个然后到办公室(点p) 问最少需要的时间是多少 先排序 如果j<=i 则必须拿这个钥匙 dp[i][j]=max(dp[i-1][j-1],abs(p-b[j])+abs( ...

  2. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  3. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  4. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  5. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  6. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  7. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  8. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

  9. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

随机推荐

  1. 定义自己的代码风格CheckStyle简单使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-/ ...

  2. navicat for mysql 快捷键(原创)

    navicat for mysql 快捷键(原创) 在谷歌,百度上基本搜索不出来这方面的内容,我总结了一下,方便新手,节省一些探索的时间. 1.ctrl+q           打开查询窗口2.ctr ...

  3. ZYThumbnailTableView---堪比一个小型阅读App

    Demo github地址: https://github.com/liuzhiyi1992/ZYThumbnailTableView 原文地址:http://zyden.vicp.cc/zythum ...

  4. SecureCRT 7.0 如何自动记录日志

    设置步骤如下: 1.打开SecureCRT ,在菜单里选择“选项”-->“全局选项”    2.然后选择“常规”--> “默认会话”--> “编辑默认设置”    3.然后选择“日志 ...

  5. PHP debug_backtrace() 函数

    PHP Error 和 Logging 函数 实例 生成 PHP backtrace: <?php function a($txt) { b("Glenn"); } func ...

  6. javascript中提高代码的封装性

    我出的面试题中,有一条是问如何避免页面引用JS,出现函数.变量重复.冲突的. 从大的方面讲,应该引入javascript的模块化开发,符合AMD规范之类: 从小的方面说,大概就是限定变量和函数的作用域 ...

  7. EasyRTMP视频直播推送H264 sps解析错误导致播放画面拉伸问题解决

    EasyRTMP是将H264流以及AAC流以RTMP协议推送到RTMP服务器上进行直播.EasyRTMP推送库中会从H264流中提取中SPS.PPS进行解析,开发的时候遇到过有些SPS解析有误,获取到 ...

  8. jsp页面中文乱码解决方案

    一.JSP页面中文乱码 在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码. 先看一个JSP程序: <%@ page language=&q ...

  9. it starts (“forks”) a new process for each connection.

    PostgreSQL: Documentation: 10: 1.2. Architectural Fundamentals https://www.postgresql.org/docs/10/st ...

  10. ElasticSearch(八)关于document的一些知识点

    先查看一条数据: GET /ecommerce/product/5 { "_index" : "ecommerce", "_type" : ...