bzoj 1701 [Usaco2007 Jan]Cow School牛学校
[Usaco2007 Jan]Cow School牛学校
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 175 Solved: 83
[Submit][Status][Discuss]
Description
Bessy 正在上学并且分数还不错. 她考了N (一个数据中1 <= N <= 50,000, 其余数据 1 <= N <= 50,00) 次试,每次考试得分为T_i, 满分为P_i(0 <= T_i <= P_i < 40,000; 0 < P_i). 在计算总分时,她的老师先将把分数(P_i/T_i)最高的D个试卷去掉,然后将其余P_i 的和除以其余T_i的和作为Bessy的分数. Bessy精通数学,所以很快发觉这并没有想象中那么好. Bessy想告诉她的老师所有附和以下条件的D: 如果令一组(D个)分数去掉,她的分数回比老师算出来的更高. Bessy 很惊讶地发现她没有两次考试得分百分点是一样的.
Input
*第一行: N
*第2..N+1行: 第i行里有 T_i 和 P_i.
Output
* 第一行: K, 符合条件的D的个数.
*第2..K+1行: 按递增顺序,每行一个符合条件的D.
Sample Input
1 2
5 9
3 8
4 10
1 3
输入解释:
Bessy 考了5门试, 分数分别为1/2, 5/9, 3/8, 4/10, 1/3.
Sample Output
1
2
枚举剩下的分数个数kk,设最高的kk个分数和的分子分母分别为UU和DD。
那么在选了的里面找到A=min(Dt[x]−Up[x])A=min(Dt[x]−Up[x]),没选的里面找到B=max(Dt[x]−Up[x])B=max(Dt[x]−Up[x])。
如果A<BA<B,则可以更大。
对于A,BA,B的计算,可以利用决策单调性分治求解。
时间复杂度O(nlogn)O(nlogn)。
十分优秀的思想。
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define ll long long
#define ls tr[p].l
#define rs tr[p].r
#define N 100007
using namespace std;
const ll inf=;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,ans,q[N];
ll f[N],g[N];
struct Node
{
int t,p;
}a[N],b[N]; inline bool cmp(Node a,Node b)
{
return a.t*b.p>b.t*a.p;
}
void getf(int l,int r,int dl,int dr)
{
int m=(l+r)>>,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-,dl,dm);
if(r>m)getf(m+,r,dm,dr);
}
void getg(int l,int r,int dl,int dr)
{
int m=(l+r)>>,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-,dl,dm);
if(r>m)getg(m+,r,dm,dr);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].t,&a[i].p);
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++)
b[i].t=b[i-].t+a[i].t,b[i].p=b[i-].p+a[i].p;
getf(,n-,,n),getg(,n-,,n);
for(int i=;i<n;i++)
if(f[i]<g[i]) q[++ans]=n-i;
printf("%d\n",ans);
for(int i=ans;i;i--)
printf("%d\n",q[i]);
}
bzoj 1701 [Usaco2007 Jan]Cow School牛学校的更多相关文章
- BZOJ1701 : [Usaco2007 Jan]Cow School牛学校
枚举剩下的分数个数$k$,设最高的$k$个分数和的分子分母分别为$U$和$D$. 那么在选了的里面找到$A=\min(Dt[x]-Up[x])$,没选的里面找到$B=\max(Dt[x]-Up[x]) ...
- BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序
Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个 ...
- BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换+贪心)
题面 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都 ...
- bzoj 1119 [POI2009]SLO && bzoj 1697 [Usaco2007 Feb]Cow Sorting牛排序——思路(置换)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.p ...
- bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】
至今都不知道置换群是个什么东西--题解说什么就是什么.jpg 以下来自hzwer:http://hzwer.com/3905.html #include<iostream> #includ ...
- 【BZOJ 1697】1697: [Usaco2007 Feb]Cow Sorting牛排序
1697: [Usaco2007 Feb]Cow Sorting牛排序 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大 ...
- 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 3048] [Usaco2013 Jan]Cow Lineup
[bzoj 3048] [Usaco2013 Jan]Cow Lineup Description 给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿 ...
随机推荐
- Jquery 操作HTML5自定义属性data-*
HTML5自定义属性规范的写法<a data-roleid="12"></a>,也可以直接写<a roleid="12">& ...
- hihocoder1736 最大的K-偏差排列
思路: 容易写错的贪心题. 实现: #include <bits/stdc++.h> using namespace std; int main() { int n, k; while ( ...
- let块级引起的闭包思考
因为es6在node中用的比较频繁,最近在按计划根据阮一峰的es6教程从头开始学习一遍, 第一步遇到的就是“看似非常熟悉”的let小伙伴,核心character如下: 即:let变量的作用域只在块内. ...
- bt设置指定的ip地址
auto eth0 iface eth0 inet staticaddress 192.168.1.112 IP地址netmask 255.255.255.0 子网掩码network 192.168. ...
- help命令
help——获得Shell内置命令的帮助信息 命令所在路径:Shell内置命令 示例1: # help cd 使用which或者whereis查找不到路径的命令一般是Shell内置命令,cd就是一个S ...
- APP设计细节总结-摘录
视觉表现型问题 1. 统一的图标设计风格 2. 图标大小的视觉平衡(根据图标的体量对其大小做出相应的调整) 3. 优化你的分割线(通常我们会选择浅色而否定深色) 4. 合理的运用投影的颜色与透明度 5 ...
- MATLAB GUI制作快速入门
创建空白的GUI在MATLAB命令行中输入guide新建GUI,选择Blank GUI (Default),点击确定后就生成了一个空白的GUI制作界面,如下图所示 图1制作GUI的具体过程简单加法器将 ...
- flask_SQLAlchemy 中常用的过滤和执行器
常用的SQLAlchemy查询过滤器 过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的 ...
- es 集群部署
下载 [root@localhost ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1 ...
- C/C++语言:科学计数法
主要用来表示浮点数,表达方便 浮点数的科学计数,由三个部分组成: a + E + b a:由一个浮点数组成,如果写成整数,编译器会自动转化为浮点数: E:可以大写E,也可以小写e: b:使用一个十进制 ...