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. gromacs2018使用踩坑记--grompp 为啥要用-r

    1. GMX grompp 概要 gmx grompp [ -f [<.mdp>] ] [ -c [<.gro / .g96 / ...>] ] [ -r [<.gro ...

  2. 深度学习----现今主流GAN原理总结及对比

    原文地址:https://blog.csdn.net/Sakura55/article/details/81514828 1.GAN 先来看看公式:             GAN网络主要由两个网络构 ...

  3. 【flask】使用类组织配置-使用工厂函数创建程序实例

    [需求] 使用配置类管理flask管理测试环境, 通过1个参数即可控制Flask是运行develpment环境还是production环境(数据库配置,邮件配置也要根据环境的变化而变化) [思路] 1 ...

  4. flutter runtimeType

    通过runtimeType可以获取当前数据类型 var a = 10; var b = 10.0; var c = '10'; var d = true; var e = [12.5,13.1]; v ...

  5. svn导出项目到myeclipse,运行报ClassNotFoundException

    一开始以为是 这样的svn导出项目到myeclipse,运行报ClassNotFoundException 后来不行 又看了一下  还不行 以为是这样的MyEclipse2014报错java.lang ...

  6. WEB应用服务器都有哪些?

    大型WEB服务器在UNIX和Linux平台下使用最广泛的免费HTTP服务器是W3C.NCSA和APACHE服务器,而Windows平台NT/2000/2003使用IIS的WEB服务器.在选择使用WEB ...

  7. 使用canvas实现对图片的批量打码

    最近有个需求,利用h5的canvas对图片一些涉及个人隐私的地方进行打码再上传,而且最好能实现批量打码.意思是在一张图片上对哪些地方做了打码,后续的所有图片都在同样的地方也可以自动打上码,不用人工一张 ...

  8. spring5的基本组成(6个模块)

    1:数据访问及集成(Data Access/Integeration):jdbc,orm,oxm,jms,transactions ——由 spring-jdbc.spring-tx.spring-o ...

  9. ubuntu分区建议总结

    本文为转载别人的内容,结合了其他内容,进行分区的总结.其中主要是分区表格,对于ubuntu安装时,进行分区非常有用. 无论是安装Windows还是Linux操作系统,硬盘分区都是整个系统安装过程中最为 ...

  10. 【VS开发】文件夹和文件选择EditBrowe控件使用

    让EditBrowse控件既能浏览文件,又能浏览文件夹... 下图是在http://www.codeproject.com/Articles/35722/MFC-Feature-Pack-CMFCEd ...