链接:http://codeforces.com/contest/873/

A题:

  贪心,把最大的k个数变成x即可。

B题:

  从左向右枚举右端点,维护balance的最长长度。任意一个子串可以看做两个前缀相减,对于已知当前右端点中1比0多多少个,只需要减去前面的某个前缀,在这个前缀中1比0也多这么多就可以了。所以开一个数组,维护1比0多i个的最左边的前缀的位置。

C题:

  每一列相互独立单独处理,对于每一列贪心的选择去掉多少个1就可以了(显然只会从前往后逐次去掉)。

D题:

  首先注意到,k是偶数的时候是无解的,因为调用的次数必然是奇数。

  那么当k是奇数的时候,只要k不超过n个数能够调用的上界,就可以通过递归去构造。

  上界可以用递推得到。构造可以用递归得到。

#include<bits/stdc++.h>
using namespace std; const int maxn=;
int cnt[maxn];
int a[maxn];
int tot; void print(int n,int k,int mi,int ma)
{
if (k==)
{
for (int i=;i<n;i++) a[tot++]=mi+i;
}
else if (cnt[n]==k)
{
for (int i=n-;i>=;i--) a[tot++]=mi+i;
}
else
{
int l=,r=n;
int mid=(l+r)/;
if (cnt[mid-l]>=k-)
{
int cou=mid-l;
print(mid-l,k-,ma-cou+,ma);
print(r-mid,,mi,ma-cou);
}
else
{
int cou=mid-l;
print(mid-l,cnt[mid-l],ma-cou+,ma);
print(r-mid,k-cnt[mid-l]-,mi,ma-cou);
}
}
} int main()
{
int n,k;
scanf("%d%d",&n,&k);
cnt[]=;
for (int i=;i<=;i++)
{
int l=,r=i;
int mid=(l+r)/;
cnt[i]=cnt[mid-l]+cnt[r-mid]+;
}
if (cnt[n]<k || k%==) printf("-1");
else
{
print(n,k,,n);
for (int i=;i<n;i++) printf("%d ",a[i]);
}
return ;
}

problem D

E题:

  待补。

F题:

  reverse一下,不能以某个位置结尾变成不能以某个位置开头。然后做一次后缀数组,得到height数组。要想让|a|·f(a)最大,那么a必然是某一个后缀。如果一个后缀的开头不是bad position,直接把这个后缀的长度更新答案。那么对于要匹配两个及以上后缀的,这个结果基本上跟height数组形成的柱状图有关,类似于用单调栈维护一下以每个位置为扩展的最大面积即可。

[codeforces/edu30]总结(E)的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. 一句话描述 Java 设计模式

    Java 设计模式 设计模式是对应于不同的应用目的的.   适配:将特定功能接口适配需求方   桥接:面向两个接口,无关接口的实现: 抽象化与实现化解耦,使得二者可以独立变化:例:笔与图形,笔可以画图 ...

  2. vim python自动补全插件:pydiction

    vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.pyt ...

  3. leetcode-买卖股票的最佳时机(动态规划)

    买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股 ...

  4. typescript 学习记录

    类型判断: typeJudge() { //typeof 用来判断变量类型 var s: string = 'egret'; var isString: boolean = typeof s === ...

  5. [转载]Tensorflow中reduction_indices 的用法

    Tensorflow中reduction_indices 的用法 默认时None 压缩成一维

  6. Python变量常量及注释

    一.变量命名规则1.有字母.数字.下划线搭配组合而成2.不能以数字开头,更不能全为数字3.不能用Python的关键字4.不要太长5.名字要有意义6.不要用中文7.区分大小写8.采用驼峰体命名(多个单词 ...

  7. 对int类型最小值INT_MIN取负值结果不变

    在32位系统中,int类型的最大值是0x7fffffff(即除了最高的1Bit其他31位都为1),而最小值是0x80000000(除了最高1bit,其他31位都为0). 显然,对于最小值求负数是不存在 ...

  8. 实战小项目之ffmpeg推流yolo视频实时检测

    之前实现了yolo图像的在线检测,这次主要完成远程视频的检测.主要包括推流--収流--检测显示三大部分 首先说一下推流,主要使用ffmpeg命令进行本地摄像头的推流,为了实现首屏秒开使用-g设置gop ...

  9. 十二:NodeManager

    NM负责启动和管理节点上的containers.AM通过containers来运行任务. Health Checker Service 创建检查服务     NM运行一个检查服务来检查节点的状态,该服 ...

  10. PAT 甲级 1048 Find Coins

    https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840 Eva loves to collect c ...