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. impdp因致命错误终止 ORA-7445 [kpodpals]

    基本要素 前天好不easy成功给用户把数据全库导出,今天用户又告知导出的数据无法导入,首先就问用户有什么错误提示,给我的回答是就一个'作业"SYSTEM"."SYS_IM ...

  2. Active Directory的LDAP协议与DN(Distinguished Name)详解

    前言 光copy几段代码的文章没什么意思,本章上最基础的代码,主要是为了从编程方面聊LDAP和DN,其它的后面聊,一步步慢慢来吧. Active Directory编程须知 1.域控服务器: Wind ...

  3. hessian实战1

    服务端: 1.新建MAVEN HessianServer 项目 2.新建接口 Basic public interface Basic { String hello(String name); Str ...

  4. mysql启动warning: World-writable config file

    如果在启动warning: World-writable config file /home/mysql/my.cnf is ignored原因:my.cnf的读取权限进行了设置,不允许World-w ...

  5. PostgreSQL与MySQL比較

    特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例. 一个实例能够管理一个或多个数据库.一台server能够执行多个 mysqld 实例.一个实例管理器能 ...

  6. Create an OData v4 Endpoint Using ASP.NET Web API 2.2(使用ASP.NET Web API 2.2创建OData v4端点)

    开放数据协议Open Data Protocol(OData)是web的一种数据存取协议,OData通过设置CRUD操作(Create创建.Read读取.Update更新,Delete删除)提供一种统 ...

  7. EasyDarwin开源摄像机访问EasyCamera中海康摄像头语音对讲和云台控制转发实现

    转自:http://blog.csdn.net/yanzhuomin/article/details/52887311 EasyCamera中关于摄像头SDK的调用都集中在EasyCameraSour ...

  8. The threads in the thread pool will process the requests on the connections concurrently.

    https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html Most of the executor implem ...

  9. pexpect库学习之包装类详解

    在pexpect库中,包装类的构造参数使用的命令或者要包装命令的提示符,还可以通过这个包装类来修改命令的提示符,那么所谓的包装类实际就是用于给用户交互相应的子命令,它的实例方法主要是“run_comm ...

  10. ArcGIS10和ArcGIS10.1关于AO Licence初始化的问题

    两个版本主要是esriLicenseProductCode.esriLicenseProductCodeArcInfo和esriLicenseProductCode.esriLicenseProduc ...