B5090 组题 二分答案
bzoj有毒,看不了自己哪错了。。。根本没法debug、
我到现在还是不知道自己代码为什么会T,二分次数也加限制了,但是还是T。。。救命啊!!!
题干:
- Description
- 著名出题人小Q的备忘录上共有n道可以出的题目,按照顺序依次编号为1到n,其中第i道题目的难度系数被小Q估计
- 为a_i,难度系数越高,题目越难,负数表示这道题目非常简单。小Q现在要出一套难题,他决定从备忘录中选取编
- 号连续的若干道题目,使得平均难度系数最高。当然,小Q不能做得太过分,一套题目必须至少包含k道题目,因此
- 他不能通过直接选取难度系数最高的那道题目来组成一套题。请写一个程序,帮助小Q挑选平均难度系数最高的题
- 目。
- Input
- 第一行包含两个整数n,k(<=n<=,<=k<=n),分别表示题目的总量和题数的下界。
- 第二行包含n个整数a_1,a_2,...,a_n(|a_i|<=^),分别表示每道题目的难度系数。
- Output
- 输出一个既约分数p/q或-p/q,即平均难度系数的最大值。
- Sample Input
- - -
- Sample Output
- /
- HINT
- Source
- claris原创,本oj版权所有,翻版必究
我的代码:(蜜汁TLE)
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<ctime>
- #include<queue>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- #define duke(i,a,n) for(int i = a;i <= n;i++)
- #define lv(i,a,n) for(int i = a;i >= n;i--)
- #define clean(a) memset(a,0,sizeof(a))
- const int INF = << ;
- typedef long long ll;
- typedef double db;
- template <class T>
- void read(T &x)
- {
- char c;
- bool op = ;
- while(c = getchar(), c < '' || c > '')
- if(c == '-') op = ;
- x = c - '';
- while(c = getchar(), c >= '' && c <= '')
- x = x * + c - '';
- if(op) x = -x;
- }
- template <class T>
- void write(T x)
- {
- if(x < ) putchar('-'), x = -x;
- if(x >= ) write(x / );
- putchar('' + x % );
- }
- db a[];
- db s[];
- db g[];
- int mn[];
- db eps = 1e-;
- int n,k,ok = ;;ll y,x;
- db l,r;
- ll gcd(ll a,ll b)
- {
- if(!b)
- return a;
- else
- return gcd(b,a % b);
- }
- int main()
- {
- read(n);read(k);
- l=-,r=;
- duke(i,,n)
- {
- scanf("%lf",&a[i]);
- s[i] = s[i - ] + a[i];
- }
- duke(p,,)
- {
- ok = ;
- db mid = (l + r) / ;
- duke(i,,n)
- {
- g[i] = s[i] - (db)i * mid;
- }
- /*duke(i,1,n)
- cout<<g[i]<<" ";
- cout<<endl;*/
- duke(i,,n)
- {
- if(g[i] < g[mn[i - ]])
- mn[i] = i;
- else
- mn[i] = mn[i - ];
- }
- duke(i,k,n)
- {
- if(g[i] > g[mn[i - k]])
- {
- x = s[i] - s[mn[i - k]];
- y = i - mn[i - k];
- ok = ;
- break;
- }
- }
- if(ok == )
- {
- l = mid;
- }
- else
- {
- r = mid;
- }
- }
- ll g = gcd(x,y);
- if(g < )
- g = -g;
- if(g)
- x /= g,y /= g;
- printf("%lld/%lld\n",x,y);
- return ;
- }
- /*
- 5 3
- 1 4 -2 -3 6
- */
网上的AC代码:
- #include<cstdio>
- #include<algorithm>
- #include<cctype>
- using namespace std;
- typedef double db;
- typedef long long ll;
- const int N=1e5+;
- int n,k,a[N],mn[N];
- ll s[N],A,B,T;
- db b[N];
- inline int rd()
- {
- char ch=getchar();
- int x=,f=;
- while(!isdigit(ch))
- {
- if(ch=='-') f=-;
- ch=getchar();
- }
- while(isdigit(ch))
- {
- x=x*+(ch^);
- ch=getchar();
- }
- return x*f;
- }
- bool check(db mid)
- {
- int i,j;
- b[]=a[]-mid;
- for(i=; i<=n; ++i)
- {
- b[i]=b[i-]+a[i]-mid;
- mn[i]= b[i] < b[mn[i-]]? i:mn[i-];
- }
- for(i = k; i<=n; ++i)
- {
- if(b[i]>b[mn[i-k]])
- {
- A = s[i] - s[mn[i-k]];
- B = i - mn[i-k];
- return true;
- }
- }
- return false;
- }
- inline ll gcd(ll x,ll y)
- {
- return !y? x:gcd(y,x%y);
- }
- int main()
- {
- int i,j;
- n=rd();
- k=rd();
- for(i=; i<=n; ++i)
- {
- a[i]=rd();
- s[i]=s[i-]+a[i];
- }
- db l=-1e8,r=1e8,mid;
- mn[]=;
- for(i=; i<=; ++i)
- {
- mid=(l+r)/;
- if(check(mid)) l=mid;
- else r=mid;
- }
- T=gcd(A,B);
- if(T<) T=-T;
- if(T) A/=T,B/=T;
- printf("%lld/%lld\n",A,B);
- }
没有任何区别好不好!为什么TLE?
B5090 组题 二分答案的更多相关文章
- NOIP2015跳石头[二分答案]
题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石( ...
- 洛谷P4589 [TJOI2018]智力竞赛(二分答案 二分图匹配)
题意 题目链接 给出一个带权有向图,选出n + 1n+1条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 Sol TJOI怎么净出板子题 二分答案之后直接二分图匹配check一下. ...
- BZOJ2653 middle(二分答案+主席树)
与中位数有关的题二分答案是很常用的trick.二分答案之后,将所有大于它的看成1小于它的看成-1,那么只需要判断是否存在满足要求的一段和不小于0. 由于每个位置是1还是-1并不固定,似乎不是很好算.考 ...
- BZOJ5090 组题 BZOJ2017年11月月赛 二分答案 单调队列
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5090 11月月赛A题 题意概括 给出n个数. 求连续区间(长度大于等于k)最大平均值. 题解 这题 ...
- 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- cogs 2109. [NOIP 2015] 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分
2109. [NOIP 2015] 运输计划 ★★★☆ 输入文件:transport.in 输出文件:transport.out 简单对比时间限制:3 s 内存限制:256 MB [题 ...
- BZOJ_4590_[Shoi2015]自动刷题机_二分答案
BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...
- Codeforces Round #402 (Div. 2) D. String Game(二分答案水题)
D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- BZOJ 4590 [Shoi2015]自动刷题机 ——二分答案
二分答案水题. #include <cstdio> #include <cstring> #include <iostream> #include <algo ...
随机推荐
- mysql GTID主从复制(主库在线,添加新丛库)
要求: 1. 主库上线,主库不停止服务的前提下做主从复制 2. 新添加一个丛库 操作: 1. 在主库导出数据(主库正常运行): 2. 将 ...
- php判断form数据是否为POST而来,判断数据提交方式
//判断form数据是否为POST而来,判断数据提交方式 if ($_SERVER['REQUEST_METHOD'] != 'POST') { // 非 POST 来路,做警告或你想做的事 retu ...
- 10、scala面向对象编程之Trait
1. 将trait作为接口使用 2.trait中定义具体方法 3.trait定义具体字段 4.trait中定义抽象字段 5.为实例对象混入trait 6.trait调用链 7.在trait中覆盖抽象 ...
- dubbo之连接控制
连接控制 服务端连接控制 限制服务器端接受的连接不能超过 10 个 1: <dubbo:provider protocol="dubbo" accepts="10& ...
- Lazarus Reading XML- with TXMLDocument and TXPathVariable
也就是使用XPath的方式,具体语法规则查看http://www.w3school.com.cn/xpath/xpath_syntax.asp,说明得相当详细.这里列举例子是说明在Lazarus/FP ...
- (转) Arcgis for js之WKT和GEOMETRY的相互转换
http://blog.csdn.net/gisshixisheng/article/details/44057453 1.wkt简介 WKT(Well-known text)是一种文本标记语言,用于 ...
- url取值乱码问题,url加中文导致页面不能加载问题 js unicode转码,以及解码
很多时候写H5或其他适配时,打不开url.很多原因是因为浏览器不支持中文url,从url拿 出来的中文值也会乱码,这时候就必须把中文转化成Unicode值,去进行页面传值 中文转Unicode fun ...
- centos安装指定mysql
mysql下载地址:http://repo.mysql.com/ nginx下载地址 我下载是这个 http://nginx.org/packages/centos/7/noarch/RPMS/ngi ...
- 数据库操作(二)SOQL
1.SOQL SOQL是对象查询语言.它可以在单个sObject中在给定标准上搜索记录. 2.SELECT语句 [格式]SELECT 列名称 FROM 表名称 [示例] 3.SELECT...WHER ...
- mitmproxy安装与使用
mitmproxy安装与使用 (抓包,中间人代理工具.支持SSL) 在开发微信公端的时候开发调试只能用浏览器自带开发工具,本来移动端可以用用fiddler.wireshark等工具来抓包,但是自从改用 ...