A

B

/* Huyyt */
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mkp(a,b) make_pair(a,b)
#define pb push_back
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
using namespace std;
typedef long long ll;
inline void read(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '')
{
if (c == '-')
{
p = -;
}
c = getchar();
}
while (c >= '' && c <= '')
{
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
const long long mod = 1e9 + ;
const int N = 1e5 + ;
int n;
char f[][];
int num[];
int main()
{
int n, m;
cin >> n >> m;
for (int i = ; i <= n; i++)
{
scanf("%s", f[i] + );
}
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
if (f[i][j] == '')
{
num[j]++;
}
}
}
int flag;
for (int i = ; i <= n; i++)
{
flag = ;
for (int j = ; j <= m; j++)
{
if (f[i][j] == '' && num[j] == )
{
flag = ;
break;
}
}
if (flag)
{
cout << "YES" << endl;
return ;
}
}
cout << "NO" << endl;
return ;
}

C

/* Huyyt */
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mkp(a,b) make_pair(a,b)
#define pb push_back
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
using namespace std;
typedef long long ll;
inline void read(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '')
{
if (c == '-')
{
p = -;
}
c = getchar();
}
while (c >= '' && c <= '')
{
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
const long long mod = 1e9 + ;
const int N = 1e5 + ;
int n;
ll num[N];
priority_queue<ll, vector<ll>, less<ll> >que;
queue<ll> q;
int main()
{
int n, k;
ll l;
ll minn = INT_MAX;
ll anser = ;
cin >> n >> k >> l;
for (int i = ; i <= n * k; i++)
{
scanf("%d", &num[i]);
minn = min(minn, num[i]);
}
int cnt = ;
if (k == )
{
for (int i = ; i <= n * k; i++)
{
if (num[i] > minn + l)
{
cout << << endl;
return ;
}
anser += num[i];
}
cout << anser << endl;
return ;
}
//cout<<minn<<endl;
for (int i = ; i <= n * k; i++)
{
if (num[i] <= minn + l)
{
que.push(num[i]);
}
else
{
q.push(num[i]);
}
}
while (n--)
{
for (int i = ; i <= k - ; i++)
{
if (que.empty())
{
cout << << endl;
return ;
}
if (q.empty())
{
if (que.size() > )
{
//cout<<que.top()<<endl;
que.pop();
}
else
{
cout << << endl;
return ;
}
}
else
{
//cout<<q.front()<<endl;
q.pop();
}
}
//cout<<que.top()<<endl;
ll now = que.top();
que.pop();
//cout<<endl;
if (now > minn + l)
{
cout << << endl;
return ;
}
else
{
anser += now;
}
}
cout << anser << endl;
return ;
}

D. Sand Fortress

给你N高度的沙子 要求你堆出刚好N高度的沙子 相邻的两个沙子差距不超过1 第一堆沙子不超过H

解:

①

官方题解:

先考虑金字塔型1到K到1 这样得到的总数为k*(k+1)/2-k=k2

然后我们贪心把剩下的n-k2都用k来放 再需要用的总数就是

可以证明对于任意k从2到  这个函数从1开始是递增的

然后贪心地把金字塔尽量往左移 即让初始的h1=min(k,H)

则左移后的沙子总数为 

所以我们需要做的是找到最大的k使得当h1=min(k,H)时 

当恰好为n时 不用补充 小于n时 用k去补充

#include <bits/stdc++.h>

#define forn(i, n) for (int i = 0; i < int(n); i++)

typedef long long li;

using namespace std;

const int INF = 2e9;
li n, h; bool check(li maxh){
li k = min(h, maxh);
li cnt = maxh * maxh - k * (k - ) / ;
return (cnt <= n);
} li get(li maxh){
li k = min(h, maxh);
li cnt = maxh * maxh - k * (k - ) / ;
li len = ( * maxh - ) - (k - );
n -= cnt;
return len + (n + maxh - ) / maxh;
} int main() {
scanf("%lld%lld", &n, &h);
li l = , r = INF; while (l < r - ){
li m = (l + r) / ; if (check(m))
l = m;
else
r = m;
} printf("%lld\n", check(r) ? get(r) : get(l));
return ;
}

②(和官方差不多)

构造两种

第一种为三角形 第二种为梯形

两种分别二分构造 然后取最小值即可

E. Pencils and Boxes

给你一个N个数字的数组,要求你把每个数字都放入一个盒子

每个数字只属于一个盒子 每个盒子至少要有K个数字 每个盒子的极差不超过d

能实现的话YES 否则NO

解:

贪心 单调队列

先排序 然后贪心 很容易想到一个盒子里能放多少连续的就尽量放多少

通过单调队列实现能放多少尽量放多少的操作

/* Huyyt */
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mkp(a,b) make_pair(a,b)
#define pb push_back
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
using namespace std;
typedef long long ll;
inline void read(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '')
{
if (c == '-')
{
p = -;
}
c = getchar();
}
while (c >= '' && c <= '')
{
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
const long long mod = 1e9 + ;
const int N = 5e5 + ;
int n;
int num[N];
int q[N];
int main()
{
int k, d;
read(n), read(k), read(d);
for (int i = ; i <= n; i++)
{
read(num[i]);
}
int now;
sort(num + , num + + n);
int head = ;
int tail = ;
for (int i = k; i <= n; i++)
{
while (head <= tail && num[i] - num[q[head] + ] > d)
{
head++;
}
if (head <= tail && i - q[head] >= k)
{
q[++tail] = i;
}
}
if (q[tail] == n)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return ;
}

F

Codeforces 985 最短水桶分配 沙堆构造 贪心单调对列的更多相关文章

  1. Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)

    题意:给一个\(n\)X\(m\)的矩阵,矩阵中某个数字\(k\)表示其四周恰好有\(k\)个不为0的数字,你可以使任意位置上的数字变大,如果操作后满足条件,输出新矩阵,否则输出NO. 题解:贪心,既 ...

  2. BZOJ1233 [Usaco2009Open]干草堆tower[贪心+单调队列优化]

    地址 注意思路!多看几遍! 很巧妙的一道题.不再是决策点以dp值中一部分含j项为维护对象,而是通过维护条件来获取决策. 首先有个贪心策略,让底层的宽度尽可能小,才能让高度尽可能高.所以应该倒着dp,表 ...

  3. 《MORE EFFECTIVE C++》条款27 要求或者禁止对象分配在堆上

    1. 要求对象分配在堆上 临时对象一般是存在于栈中的,或者是静态对象存在于常量存储区的.那么当创建一个这样的对象的时候,一般是需要隐式或显式地调用构造函数,在销毁的时候调用析构函数的.可以从这方面入手 ...

  4. new 的对象如何不分配在堆而分配在栈上(方法逃逸等)

    当能够明确对象不会发生逃逸时,就可以对这个对象做一个优化,不将其分配到堆上,而是直接分配到栈上,这样在方法结束时,这个对象就会随着方法的出栈而销毁,这样就可以减少垃圾回收的压力. 如方法逃逸. 逃逸分 ...

  5. iOS开发中的内存分配(堆和栈)

    进程的内存分区 所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先 ...

  6. (转)在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?

    转自:http://www.cnblogs.com/xiaoyao2011/archive/2011/09/09/2172427.html 在.NET程序运行过程中,什么是堆,什么是栈? 堆也就是托管 ...

  7. C++内存分配与对象构造的分离

    在C++中,我们基本用new(delete)操作符分配(释放)内存.new操作符为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类 ...

  8. experiment : 在私有堆和默认进程堆中, 测试能分配的堆空间总和, 每次能分配的最大堆空间

    实验环境: Win7X64Sp1 + vs2008,  物理内存16GB. 实验结论: *  进程堆的最大Size并没有使用完剩余的物理内存    *  每次能分配的最大堆空间接近2M, 不管是私有堆 ...

  9. Python标准库模块之heapq – 堆构造

    Python标准库模块之heapq – 堆构造 读前福利:几百本经典书籍https://www.johngo689.com/2158/ 原文链接:https://www.johngo689.com/2 ...

随机推荐

  1. 新建一个浏览器APP

    安卓开发环境准备好了,试试新建一个浏览器程序吧 1.Start a new Android Studio Project 2.选这个像微信一样的样式 3.选择语言和版本 4.等待创建完成,拖一个Web ...

  2. Checkbox 多选框

    Checkbox 多选框 一组备选项中进行多选 ¶基础用法 单独使用可以表示两种状态之间的切换,写在标签中的内容为 checkbox 按钮后的介绍. 在el-checkbox元素中定义v-model绑 ...

  3. java中常见异常总汇,附解释

    Java Exception: 1.Error 2.Runtime Exception 运行时异常3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系统 ...

  4. 为解决Thymeleaf数字格式化问题而想到的几种方案

    背景: spring后端输出double类型数据,前端使用thymeleaf框架,格式化double数据类型,由于需要显示原值(比如原来录入5,而不能显示5.00),因此需要存储数值(存储值为deci ...

  5. Spring Cloud负载均衡:使用zuul作服务器端负载均衡

    1.目的: 本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul. zuul作为Spring Cloud中的网关组件,负责路由转发.身份验证.请求过滤等等功能,那么我们可以 ...

  6. linux 下载jdk 、maven、git

    jdk: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-secureback ...

  7. Python_序列对象内置方法详解_String

    目录 目录 前言 软件环境 序列类型 序列的操作方法 索引调用 切片运算符 扩展切片运算符 序列元素的反转 连接操作符 重复运算符 成员关系符 序列内置方法 len 获取序列对象的长度 zip 混合两 ...

  8. 部署php程序报错:站点已关闭

    场景: 之前把公司线上的php源码包拿到笔记本的虚拟机上测试部署,部署完成后通过浏览器访问总是出现站点已关闭 原因:把线上php程序配置文件config.php里面的数据库连接信息改成了笔记本虚拟机的 ...

  9. Loading——spin.js

    官网:[http://spin.js.org/] Github地址:[https://github.com/fgnass/spin.js]

  10. 【嵌入式开发】树莓派+官方摄像头模块+VLC串流实时输出网络视频流

    sudo apt-get update sudo apt-get install vlc sudo raspivid -o - -t 0 -w 640 -h 360 -fps 25|cvlc -vvv ...