2019牛客暑假多校赛(第二场) F和H(单调栈)
F-Partition problem
https://ac.nowcoder.com/acm/contest/882/F
题意:输入一个数n,代表总共有2n个人,然后每个人对所有人有个贡献值,然后问题需要将2n个人分成两组,每组n个人,问如何分组使得两组之间的价值最大,同组人不算价值。
思路:直接dfs暴力分组。
//aeha
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
const int inf = 0x3f3f3f3f;
int dir[][]={{,},{,},{,},{,-},{-,},{-,-},{,-},{-,}};
#define pi acos(-1)
#define ls rt<<1
#define rs rt<<1|1
#define me0(s) memset(s,0,sizeof(s))
#define me1(s) memset(s,1,sizeof(s))
#define mef(s) memset(s,-1,sizeof(s))
#define meinf(s) memset(s,inf,sizeof(s))
const int N=;
ll ans;
int n;
int t1[],t2[];
int a[N],b[N],v[N][N];
inline int read() {
char c=getchar(); int x=, f=;
while(c<''|c>'') {if(c=='-') f=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*f;
}
ll q_pow(ll a,ll b,ll mod){
ll anss=;
while(b){
if(b&) anss=anss*a%mod;
a=a*a%mod;
b>>=;
}
return anss;
}
ll q_mul(ll a,ll b,ll mod){
ll anss=;
while(b){
if(b&) anss=(anss+a)%mod;
a=(a+a)%mod;
b>>=;
}
return anss;
}
void dfs(int pos,int cnt1,int cnt2,ll ret){
// pos表示当前搜的人的序号,cnt1表示第一组的人数,cnt2表示第二组的人数,ret表示贡献
if(cnt1==cnt2&&cnt1==n){
ans=max(ans,ret);
return ;
}
ll tmp=;
if(cnt1<n){
for(int i=;i<cnt2;i++){
tmp+=v[pos][t2[i]];
}
t1[cnt1]=pos;
dfs(pos+,cnt1+,cnt2,ret+tmp);
}
tmp=;
if(cnt2<n){
for(int i=;i<cnt1;i++){
tmp+=v[pos][t1[i]];
}
t2[cnt2]=pos;
dfs(pos+,cnt1,cnt2+,ret+tmp);
}
}
int main(int argc, char * argv[])
{
std::ios::sync_with_stdio(false);
cin>>n;
ans=;
for(int i=;i<*n;i++){
for(int j=;j<*n;j++){
cin>>v[i][j];
}
}
dfs(,,,);
cout<<ans<<endl;
return ;
}
H-Second Large Rectangle
https://ac.nowcoder.com/acm/contest/882/H
题意:给定一个n*m的矩阵,其中全由0,1两个数字组成,问找到的第二大的全由1组成的矩阵的面积是多少。
思路:先用单调栈的求第一大矩阵的模板,然后在后面的时候修改一下 ,将各种状态保存下来,注意去重。然后输出第二大的面积就行。
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
const int inf = 0x3f3f3f3f;
#define pi acos(-1)
#define ls rt<<1
#define rs rt<<1|1
#define me0(s) memset(s,0,sizeof(s))
#define me1(s) memset(s,1,sizeof(s))
#define mef(s) memset(s,-1,sizeof(s))
#define meinf(s) memset(s,inf,sizeof(s))
const int N=;
char a[][];
int h[];
int L[],R[];
map<int,int> ma;
bool v[][];
inline int read() {
char c=getchar(); int x=, f=;
while(c<''|c>'') {if(c=='-') f=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*f;
}
ll q_pow(ll a,ll b,ll mod){
ll anss=;
while(b){
if(b&) anss=anss*a%mod;
a=a*a%mod;
b>>=;
}
return anss;
}
ll q_mul(ll a,ll b,ll mod){
ll anss=;
while(b){
if(b&) anss=(anss+a)%mod;
a=(a+a)%mod;
b>>=;
}
return anss;
}
int main(int argc, char * argv[])
{
std::ios::sync_with_stdio(false);
int n,m;
while(cin>>n>>m){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
cin>>a[i][j];
}
}
int maxn=;
for(int i=;i<=n;i++){
me0(v);
for(int j=;j<=m;j++){
if(a[i][j]=='')
h[j]++;
else h[j]=;
}
h[]=h[m+]=-;
stack<int>s;
for(int j=;j<=m;j++){
L[j]=;
if(s.size()==){
s.push(j);
L[j]=j;
}
else{
while(s.size()>&&h[s.top()]>=h[j])
s.pop();
if(s.size()==) L[j]=;
else L[j]=s.top()+;
s.push(j);
}
}
while(!s.empty()){
s.pop();
}
for(int j=m;j>=;j--){
R[j]=m;
if(s.size()==){
s.push(j);R[j]=j;
}
else{
while(s.size()>&&h[s.top()]>=h[j])s.pop();
if(s.size()==)R[j]=m;
else R[j]=s.top()-;
s.push(j);
}
}
for(int j=;j<=m;j++){
if(!v[L[j]][R[j]]){
ma[h[j]*(R[j]-L[j]+)]++;
v[L[j]][R[j]]=;
ma[h[j]*(R[j]-L[j])]++;
ma[(h[j]-)*(R[j]-L[j]+)]++;
}
if(h[j]*(R[j]-L[j]+)>maxn)
maxn=h[j]*(R[j]-L[j]+);
}
}
int flag=,ans,pos;
for(int i=maxn;i>=;i--){
if(ma[i]&&ma[i]>){
ans=i;
flag=;
break;
}
else if(ma[i]&&ma[i]==){
pos=i;
break;
}
}
if(flag) cout<<ans<<endl;
else{
for(int i=pos-;i>=;i--){
if(ma[i]){
ans=i;
break;
}
}
cout<<ans<<endl;
}
}
return ;
}
2019牛客暑假多校赛(第二场) F和H(单调栈)的更多相关文章
- 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...
- 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)
题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2020牛客暑假多校训练营 第二场 H Happy Triangle set 线段树 分类讨论
LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到se ...
- 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset
LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...
- 2020牛客暑假多校训练营 第二场 E Exclusive OR FWT
LINK:Exclusive OR 没做出 原因前面几篇说过了. 根据线性基的知识容易推出 不超过\(w=log Mx\)个数字即可拼出最大值 其中Mx为值域. 那么考虑w+2个数字显然也为最大值.. ...
- 牛客网多校赛第九场A-circulant matrix【数论】
链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校训练第二场D Kth Minimum Clique
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...
- 2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列
https://ac.nowcoder.com/acm/contest/883/B 首先先把0所在的位置变-1,1所在位置变1,然后统计一个前缀和,用sum[i]表示. 那么如果从起点开始的话只要满足 ...
随机推荐
- Victor and String HDU - 5421 双向回文树
题意: 有n种操作,开始给你一个空串,给你4中操作 1 c 在字符串的首部添加字符c 2 c 在字符串的尾部添加字符c 3 询问字符中的本质不同的回文串的个数 4 询问字符串中回文串的个数 思路 ...
- HTML_案例(首页制作)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- es 3.0 、es 5.0 、es 6.0
es 5.0 的严格模式 “use strict” /在页面最顶端写启动全局 es 5.0 严格模式 为什么使用字符串可以 向下兼容 ,,不会报错 可以写在局部方法中,推荐使用 (例如 不再兼容es ...
- php 数据导出到excel 2种带有合并单元格的导出
具体业务层面 可能会有所不同.以下两种方式涉及的合并单元格地方有所不同,不过基本思路是一致的. 第一种是非插件版本.可能更容易理解点,基本思路就是 组装table 然后 读取 输出到excel上.缺点 ...
- thinkphp present标签
present标签用于判断某个变量是否已经定义,用法: 大理石平台精度等级 <present name="name"> name已经赋值 </present> ...
- VC++ COMBO BOX控件的使用
1.你在编辑状态下点那个控件的向下的三角形,就出冒出来一个可以调高度的东东.将高度调高,否则在执行时会不能显示下拉选项. 2.为combo box添加选项,在编辑状态下选combo box控件的属 ...
- BZOJ 1089 (SCOI 2003) 严格n元树
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
- day20_函数的闭包 与 装饰器
#!/usr/bin/env python # -*- coding:utf-8 -*- # # 一些文章 # https://www.cnblogs.com/Vae1242/p/6944338.ht ...
- 字段username没有默认值查询(设计数据库一定要养成好习惯,不是主键最好设置为可以为空)
今天创建了一个表,但是username作为外键(不是主键)没有设置为可以为空,结果提交表单时忘记写username就报错了
- 深入分析Service启动、绑定过程
Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是 ...