cf873F(xjb+二分)
题目链接:http://codeforces.com/problemset/problem/837/F
题意:给出一个大小为 n 的数组 a 和一个数 k,每次操作后的到一个 a' 数组,a'i 为 a 数组中 ai 的前缀和.问最少需要几次操作能使得数组中最大的元素不小于 k.
思路:可以分类讨论一下,对于 n = 2 的情况直接可以计算出结果,对于 n = 3 的情况可以二分答案,对于 n >= 4 的情况直接暴力就好了.
代码:
#include <iostream>
#include <stdio.h>
#define ll long long
using namespace std; const int MAXN = 2e5 + ;
ll a[MAXN], k; bool is_ok(ll mid){ //注意可能会爆long long
double c = a[] + mid * a[] + (double)( + mid) * mid / * (double)a[];
return c >= k;
} ll get(void){
ll l = , r = 2e9;
while(l <= r){
ll mid = (l + r) >> ;
if(is_ok(mid)) r = mid - ;
else l = mid + ;
}
return r + ;
} int main(void){
ll x;
int n, indx = ;
bool flag = false, ok = false;
scanf("%d%lld", &n, &k);
for(int i = ; i < n; i++){
scanf("%lld", &x);
if(x) ok = true;
if(ok) a[indx++] = x; //注意前面的0对答案没有影响
if(x >= k){
flag = true;
}
}
if(flag){
puts("");
return ;
}
n = indx;
if(n == ){
ll sol = (k - a[] + a[] - ) / a[];
printf("%lld\n", sol);
}else if(n == ){
ll sol = get();
printf("%lld\n", sol);
}else{
ll sol = ;
while(){
sol++;
for(int i = ; i < n; i++){
a[i] += a[i - ];
if(a[i] >= k){
printf("%lld", sol);
return ;
}
}
}
cout << sol << endl;
}
return ;
}
cf873F(xjb+二分)的更多相关文章
- poj-2514-模拟
http://poj.org/problem?id=2514 Ridiculous Addition Time Limit: 1000MS Memory Limit: 65536K Total S ...
- PAT L2-017. 人以群分
题目链接:https://www.patest.cn/contests/gplt/L2-017 题目: 社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(out ...
- codeforces732D 二分加贪心。。
啊,不好意思..这个题窝也不会,看了网上的题解做的.. 先说一下题意.. 你要考试了..然后你有n天的时间准备以及进行考试 并且,每一天..要么你花一天时间去考一门(每天只能考一门),要么花一天时间休 ...
- LOJ.6066.[2017山东一轮集训Day3]第二题(树哈希 二分)
LOJ 被一件不愉快的小事浪费了一个小时= =. 表示自己(OI方面的)智商没救了=-= 比较显然 二分+树哈希.考虑对树的括号序列进行哈希. 那么每个点的\(k\)子树的括号序列,就是一段区间去掉距 ...
- 洛谷P4027 [NOI2007]货币兑换(dp 斜率优化 cdq 二分)
题意 题目链接 Sol 解题的关键是看到题目里的提示... 设\(f[i]\)表示到第\(i\)天所持有软妹币的最大数量,显然答案为\(max_{i = 1}^n f[i]\) 转移为\(f_i = ...
- 分块+二分,统计对数 CDOJ
http://acm.uestc.edu.cn/#/problem/show/1157 数列(seq) Time Limit: 3000/1000MS (Java/Others) Memory ...
- luogu4383 [八省联考2018]林克卡特树(带权二分+dp)
link 题目大意:给定你 n 个点的一棵树 (边有边权,边权有正负) 你需要移除 k 条边,并连接 k 条权值为 0 的边,使得连接之后树的直径最大 题解: 根据 [POI2015]MOD 那道题, ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3352 Solved: 919[Submit][Stat ...
随机推荐
- HTML5 学习记录——2
20150826 1.声明文档类型 <!DOCTYPE> 声明HTML是用什么版本写的. 常用声明; 2.HYML头部元素 <head> <title> 定义 ...
- MySQL--Basic(一)
停止与启动服务命令: net stop mysql net start mysql 修改MySQL提示符: mysql>prompt \u@\h \d> MySQL语句规范: 关键字与函数 ...
- Vue从接口请求数据
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java读取文件的时候,如何让指针重新回到文件的开头
今天在测试IO流的使用的时候发现在reader读取文件之后,再向文件添加内容,再继续读文件,打印出的结果只能读取追加的文件. 如何才能重新读取呢?试了mark和reset,似乎会报异常.记在这以后看是 ...
- 【leetcode刷题笔记】Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- MySQL_西安11月销售昨日未上架的产品_20161212
#C034西安11月销售昨日未上架的产品 SELECT 城市,a.订单日期,a.客户数,a.订单数,b.产品数,a.金额,c.销售确认额,c.毛利额,c.毛利率 FROM ( SELECT 城市,订 ...
- INT 21H 指令说明及使用方法
很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解: 例如:需要键盘输入,并且回显. AH的值需要查表取得,表在下面 指令: M ...
- ngx通讯之可观察对象实现
1.公共服务 //test.service.ts import {Injectable} from '@angular/core'; import {Subject} from 'rxjs/Subje ...
- Python模块-requests(二)
会话对象 会话对象能够跨请求保持某些参数. 它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能. 所以 ...
- JavaScript接口
JavaScript中实现接口的方法有三种: 第一种,使用注释的方法实现接口 特点:(1)最简单,但是功能最弱(2)利用 interface和 implement"文字"(3)把他 ...