bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解
辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT
先贴代码,有空再填坑
4409[Usaco2016 Feb]Circular barn
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define N 2333 using namespace std;
inline int read(){
int ret=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while ('0'<=ch&&ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return ret;
} ll s[N][N];
int n,m,a[N];
ll dp[10][N];
int p[10][N];
int sl[N],sr[N],stk[N],top; int main(){
n=read();m=read();
for (int i=1;i<=n;++i) a[i+n]=a[i]=read();
for (int i=1;i<=n;++i){
s[n+i][0]=s[i][0]=0;
for (int j=1;j<=n;++j)
s[n+i][j]=s[i][j]=s[i][j-1]+(ll)a[i+j-1]*(j-1);
}
top=1;sl[0]=0;sr[0]=n+1;
for (int i=0;i<top;++i){
stk[i]=(sl[i]+sr[i])/2;
if (sl[i]+1<stk[i]){
sl[top]=sl[i];
sr[top]=stk[i];
++top;
}
if (stk[i]+1<sr[i]){
sl[top]=stk[i];
sr[top]=sr[i];
++top;
}
} ll ans=(1LL<<60);
for (int st=1;st<=n;++st){
for (int i=0;i<=n;++i) dp[1][i]=s[st][i],p[1][i]=0;
for (int k=2;k<=m;++k) p[k][n+1]=n,p[k][0]=0,dp[k][0]=0;
for (int k=2;k<=m;++k)
for (int i=0;i<top;++i){
int now=stk[i];
dp[k][now]=(1LL<<60);
for (int j=p[k][sl[i]];j<=p[k][sr[i]]&&j<=now;++j)
if (dp[k][now]>dp[k-1][j]+s[st+j][now-j]){
dp[k][now]=dp[k-1][j]+s[st+j][now-j];
p[k][now]=j;
}
}
ans=min(ans,dp[m][n]);
}
printf("%lld\n",ans);
return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define N 25003 using namespace std;
inline int read(){
int ret=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while ('0'<=ch&&ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return ret;
} int n,m,a[N],b[N]; int main(){
a[0]=read();b[0]=read();n=read();m=read();
for (int i=n;i;--i) a[i]=read();
sort(a,a+n+1,greater<int>());
for (int i=0;i<=n;++i) a[i]=a[i]-a[i+1];
sort(a,a+n+1);
for (int i=m;i;--i) b[i]=read();
sort(b,b+m+1,greater<int>());
for (int i=0;i<=m;++i) b[i]=b[i]-b[i+1];
sort(b,b+m+1); int p=1,q=1;
ll ans=(ll)a[0]*m+(ll)b[0]*n;
while (p<=n&&q<=m)
if (a[p]<b[q])
ans+=(ll)a[p++]*(m-q+1);
else
ans+=(ll)b[q++]*(n-p+1);
printf("%lld\n",ans);
return 0;
}
4411[Usaco2016 Feb]Load balancing
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define N 100005 using namespace std;
inline int read(){
int ret=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while ('0'<=ch&&ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return ret;
} int n;
int c[2][40*N]; void modify(int id,int pos,int delta){
for (int x=1,l=1,r=1e6;;){
c[id][x]+=delta;
if (l==r) break;
int mid=(l+r)/2;
if (pos<=mid) x=(x<<1),r=mid;
else x=(x<<1^1),l=mid+1;
}
} int query(){
int ds[2]={0,0},us[2]={0,0};
for (int x=1,l=1,r=1e6;;){
int ls=x<<1,rs=x<<1^1,mid=(l+r)/2;
if (l==r) ls=rs=x;
if (max(ds[0]+c[0][ls],ds[1]+c[1][ls])<max(us[0]+c[0][rs],us[1]+c[1][rs])){
ds[0]+=c[0][ls];ds[1]+=c[1][ls];x=rs;l=mid+1;
}
else{
us[0]+=c[0][rs];us[1]+=c[1][rs];x=ls;r=mid;
}
if (ls==rs) return max(max(ds[0],ds[1]),max(us[0],us[1]));
}
} struct point{
int x,y;
} a[N];
inline bool operator <(const point &u,const point &v){
return u.x<v.x;
} int main(){
n=read();
memset(c,0,sizeof(c));
for (int i=1;i<=n;modify(1,a[i++].y=read(),1)) a[i].x=read();
sort(a+1,a+n+1);
int ans=query();
for (int i=1;i<=n;++i){
modify(0,a[i].y,1);
modify(1,a[i].y,-1);
if (i<n&&a[i].x==a[i+1].x) continue;
ans=min(ans,query());
}
printf("%d\n",ans);
return 0;
}
bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解的更多相关文章
- BZOJ4411——[Usaco2016 Feb]Load balancing
1.题意: 给出N个平面上的点.保证每一个点的坐标都是正奇数. 你要在平面上画两条线,一条是x=a,一条是y=b,且a和b都是偶数. 直线将平面划成4个部分,要求包含点数最多的那个部分点数最少. 2. ...
- [bzoj4411] [Usaco2016 Feb]Load balancing
先离散化一下(也可以不用 枚举横坐标,用线段树维护两边纵坐标上的节点数. 每次在线段树上二分...(感觉似乎树状数组也行? #include<cstdio> #include<ios ...
- bzoj千题计划180:bzoj4411: [Usaco2016 Feb]Load balancing
http://www.lydsy.com/JudgeOnline/problem.php?id=4411 用树状数组维护扫描线 一个树状数组维护扫描线之上的y<=i点,另一个维护扫描线之下y&l ...
- bzoj 4412: [Usaco2016 Feb]Circular Barn
4412: [Usaco2016 Feb]Circular Barn Description 有一个N个点的环,相邻两个点距离是1.点顺时针标号为1..N.每一个点有ci头牛,保证∑ci=N.每头牛都 ...
- BZOJ4409 [Usaco2016 Feb]Circular barn 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8724739.html 题目传送门 - BZOJ4409 题意 有一个N个点的环,相邻两个点距离是1.点顺时针标号 ...
- [bzoj4410] [Usaco2016 Feb]Fence in
根据ccz181078大爷的题解可得(QAQ,每次肯定是断掉连续一行||一列的栅栏... 贪心地想,一个格子与外面联通,显然是先把短的边界断掉(就像mst那样 但是比较蛋疼的是,因为我们每次断的时候, ...
- USACO 2017 FEB Platinum mincross 可持久化线段树
题意 上下有两个位置分别对应的序列A.B,长度为n,两序列为n的一个排列.当Ai == Bj时,上下会连一条边.你可以选择序列A或者序列B进行旋转任意K步,如 3 4 1 5 2 旋转两步为 5 2 ...
- USACO 2017 FEB Platinum nocross DP
题目大意 上下有两个长度为n.位置对应的序列A.B,其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4,则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边 ...
- 【bzoj4412】[Usaco2016 Feb]Circular Barn
先看成一条链 for一遍找位置 在for一遍算答案 #include<algorithm> #include<iostream> #include<cstring> ...
随机推荐
- Mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'
在远程连接mysql的时候,连接不上,出现如下报错:Lost connection to MySQL server at 'waiting for initial communication pack ...
- MongoDB集群架构及搭建
MongoDB分布式集群 MongDB分布式集群能够对数据进行备份,提高数据安全性,以及提高集群提高读写服务的能力和数据存储能力.主要通过副本集(replica)对数据进行备份,通过分片(shardi ...
- Linux socket多进程服务器框架二
客户端未解决Bug:子进程或者父进程退出的时候,我无法做到两个进程都调用clt_socket_Destory()方式释放socket句柄, 但是进程退出后,相应的资源也会释放,有一定影响,但是不大,以 ...
- FFmpeg中HLS文件解析源码
不少人都在找FFmpeg中是否有hls(m3u8)解析的源码,其实是有的.就是ffmpeg/libavformat/hlsproto.c,它依赖的文件也在那个目录中. 如果要是单纯想解析HLS的话,建 ...
- hadoop: hive 1.2.0 在mac机上的安装与配置
环境:mac OS X Yosemite + hadoop 2.6.0 + hive 1.2.0 + jdk 1.7.0_79 前提:hadoop必须先安装,且处于运行状态(伪分式模式或全分布模式均可 ...
- tomcat 新手上路
前提:本机先安装好JDK,保证常规java环境已经具备 1.下载Tomcat 7.0现在官网上好象已经没有安装程序版了,只有免解压zip版本(现在最新的版本是7.0.42) 下载地址 http://t ...
- 利用windbg查找dictionary导致IIS占CPU100%案例分析(一)
一.背景 先说下windbg使用场景.各位coder在工作中或多或少都会遇到下面四种情况 1.本地代码好好的,放服务器上运行一段时间后,IIS服务突然占用 w3wp.exe CPU突然100% ,不得 ...
- http缓存提高性能
秋招也算是正式结束了,现在整理一下笔记,当作巩固一下知识,也希望这个对大家有帮助 http 缓存 和 cdn 缓存可以说是面试必问的问题,竟然是必问的问题,那就总结全面一点- http缓存机制 缓存分 ...
- 似魔鬼的 『 document.write 』
在平时的工作中,楼主很少用 document.write 方法,一直觉得 document.write 是个危险的方法.楼主不用,并不代表别人不用,最近给维护的项目添了一点代码,更加深了我对 &quo ...
- Windjs应用
一个异步的js类库,应用价值不大,所以代码也没在维护了.在做h5特效或者游戏动画方面有点用处. $await是Windjs的核心api.具体可以check 浅谈Jscex的$await语义及异步任务模 ...