BZOJ1701 : [Usaco2007 Jan]Cow School牛学校
枚举剩下的分数个数$k$,设最高的$k$个分数和的分子分母分别为$U$和$D$。
那么在选了的里面找到$A=\min(Dt[x]-Up[x])$,没选的里面找到$B=\max(Dt[x]-Up[x])$。
如果$A<B$,则可以更大。
对于$A,B$的计算,可以利用决策单调性分治求解。
时间复杂度$O(n\log n)$。
#include<cstdio>
#include<algorithm>
typedef long long ll;
const int N=50010;
const ll inf=1LL<<60;
int n,i,ans,q[N];ll f[N],g[N];
struct P{int t,p;}a[N],b[N];
inline bool cmp(const P&a,const P&b){return a.t*b.p>b.t*a.p;}
void getf(int l,int r,int dl,int dr){
int m=(l+r)>>1,dm;
f[m]=inf;
for(int i=dl;i<=m&&i<=dr;i++){
ll t=1LL*a[i].t*b[m].p-1LL*a[i].p*b[m].t;
if(t<f[m])f[m]=t,dm=i;
}
if(l<m)getf(l,m-1,dl,dm);
if(r>m)getf(m+1,r,dm,dr);
}
void getg(int l,int r,int dl,int dr){
int m=(l+r)>>1,dm;
g[m]=-inf;
for(int i=dr;i>m&&i>=dl;i--){
ll t=1LL*a[i].t*b[m].p-1LL*a[i].p*b[m].t;
if(t>g[m])g[m]=t,dm=i;
}
if(l<m)getg(l,m-1,dl,dm);
if(r>m)getg(m+1,r,dm,dr);
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d",&a[i].t,&a[i].p);
std::sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++)b[i].t=b[i-1].t+a[i].t,b[i].p=b[i-1].p+a[i].p;
getf(1,n-1,1,n),getg(1,n-1,1,n);
for(i=1;i<n;i++)if(f[i]<g[i])q[++ans]=n-i;
for(printf("%d\n",ans),i=ans;i;i--)printf("%d\n",q[i]);
return 0;
}
BZOJ1701 : [Usaco2007 Jan]Cow School牛学校的更多相关文章
- bzoj 1701 [Usaco2007 Jan]Cow School牛学校
[Usaco2007 Jan]Cow School牛学校 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 175 Solved: 83[Submit][S ...
- BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序
1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 215[S ...
- BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心
BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...
- 【BZOJ 1697】1697: [Usaco2007 Feb]Cow Sorting牛排序
1697: [Usaco2007 Feb]Cow Sorting牛排序 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大 ...
- BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序
Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个 ...
- 【BZOJ】1697: [Usaco2007 Feb]Cow Sorting牛排序(置换群)
http://www.lydsy.com/JudgeOnline/problem.php?id=1697 置换群T_T_T_T_T_T_T 很久以前在黑书和白书都看过,,,但是看不懂... 然后找了本 ...
- BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换+贪心)
题面 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都 ...
- P1697: [Usaco2007 Feb]Cow Sorting牛排序
这是一道置换群的裸题=-=,先拿来试试手对着打,以后应该会更加熟练吧! ; var n,i,j,maxx,minx,now,len,cursum,tmin,sum:longint; p:array[. ...
- bzoj1697:[Usaco2007 Feb]Cow Sorting牛排序 & bzoj1119:[POI2009]SLO
思路:以bzoj1119为例,题目已经给出了置换,而每一次交换的代价是交换二者的权值之和,而置换一定是会产生一些环的,这样就可以只用环内某一个元素去置换而使得其余所有元素均在正确的位置上,显然要选择环 ...
随机推荐
- Linux系统下设置Tomcat自启动
需要将tomcat加入自启动队列中,则需要进行如下的操作: 以root用户登录系统: cd /etc/rc.d/init.d/ vi tomcat 文件内容参考如下: #!/bin/sh # # to ...
- 第一个JAVA创建
1.file-new-java project 创建项目文件夹 2.在项目文件夹new-class 3.java对大小写比较敏感 输入代码 public class HELLOWORD { publ ...
- KMP算法学习
kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置.常规方法是遍历a的每一个位置,然后从该位置开始和b进行匹配,但是这种方法的复杂度是O(n ...
- CLR via C#(15)--String,熟悉而又陌生
好久没写文章了,再拿起这本书,学习加分享,乐趣无穷啊.这两天看了写关于字符串的知识,从学写代码的时候开始,我们就基本天天跟String打交道,对它再熟悉不过了.但是仔细看看,还是有一种拨开云雾的感觉, ...
- Jquery学习笔记---闭包
1. 简要介绍 闭包可谓是js中的一大特色了,即使你对闭包没概念,你可能已经在不知不觉中使用到了闭包.闭包是什么,闭包就是一个函数可以访问到另一个函数的变量.这就是闭包,解释起来就这么一句话,不明白? ...
- JustSniffer
http://blog.csdn.net/cnbird2008/article/details/5875781
- Faster-rnnlm代码分析2 - HSTree的构造
也就是构造一棵Huffman Tree,输入是按照词汇频次由高到低排序的 采用层次SoftMax的做法,是为了使得训练和预测时候的softmax输出加速,原有multinomal softmax,是和 ...
- wifi display代码 分析
转自:http://blog.csdn.net/lilian0118/article/details/23168531 这一章中我们来看Wifi Display连接过程的建立,包含P2P的部分和RTS ...
- 11g Physical Standby配置
一,准备 Database DB_UNIQUE_NAME Oracle Net Service Name Primary PROD PROD Physical standby PRODDG PRO ...
- 声明replicated属性之后我编译不通过的问题