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(单调栈)的更多相关文章

  1. 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)

    题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...

  2. 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)

    题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...

  3. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  4. 2020牛客暑假多校训练营 第二场 H Happy Triangle set 线段树 分类讨论

    LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到se ...

  5. 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset

    LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...

  6. 2020牛客暑假多校训练营 第二场 E Exclusive OR FWT

    LINK:Exclusive OR 没做出 原因前面几篇说过了. 根据线性基的知识容易推出 不超过\(w=log Mx\)个数字即可拼出最大值 其中Mx为值域. 那么考虑w+2个数字显然也为最大值.. ...

  7. 牛客网多校赛第九场A-circulant matrix【数论】

    链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  8. 牛客网多校训练第二场D Kth Minimum Clique

    链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...

  9. 2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列

    https://ac.nowcoder.com/acm/contest/883/B 首先先把0所在的位置变-1,1所在位置变1,然后统计一个前缀和,用sum[i]表示. 那么如果从起点开始的话只要满足 ...

随机推荐

  1. springboot+mybatis 非web项目构建

    https://blog.csdn.net/wlittlefive/article/details/86157134 https://blog.csdn.net/ththcc/article/deta ...

  2. 阿里第一颗芯片问世,平头哥发布最强AI芯片含光800

    阿里巴巴第一颗自研芯片正式问世.9月25日的杭州云栖大会上,达摩院院长张建锋现场展示了这款全球最强的AI芯片——含光800.在业界标准的ResNet-50测试中,含光800推理性能达到78563 IP ...

  3. 牛客多校第五场 H subsequence 2 拓扑排序

    题意: 给你长度最长为1000的字符串,这个字符串中最多有10种字母,每次给你两种字母,输出这两种字母在字符串中的相对位置,问你这个字符串原本是什么样子,如果不存在则输出-1 题解: 把整个字符串看作 ...

  4. 命令学习_ping

    PING: ping是一个所有操作系统都支持的简单工具.我么可以利用ping来解析DNS 的A record和PTRrecord. A记录是将域名映射到IP地址,这个是ping的缺省功能, ping同 ...

  5. Java-Maven-pom.xml-project-repositories:repositories

    ylbtech-Java-Maven-pom.xml-project-repositories:repositories <!--发现依赖和扩展的远程仓库列表. --> 1. platfo ...

  6. 使用gulp搭建less编译环境

    什么是less? 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Fi ...

  7. 夏令营501-511NOIP训练17——蛇形矩阵

    传送门:QAQQAQ 题意:话说小X在孩提时,都会做标准的蛇形矩阵了,发现很好玩.现在的小X很想对其进行改版,变为如下类型的一个无限大蛇形数阵:令S(x)表示以1为左上角,x为右下角的矩形内所有数之和 ...

  8. python 中的 用chr()数值转化为字符串,字符转化为数值ord(s)函数

    1.1 python字符串定义 #!/usr/bin/python # -*- coding: utf8 -*- # 定义一个字符串 s1 = 'this is long String that sp ...

  9. Spring IOC基础回顾 — 组件扫描和装配

    目录 注解形式配置应用IOC 1. 组件自动扫描 2. 组件依赖:为bean添加注解,实现自动注入 3. Spring IOC应用小结 注解形式配置应用IOC 在类定义.方法定义.成员变量定义前使用, ...

  10. 手把手教你 GitLab 的安装及使用(转)

    深山田 关注 2018.01.30 22:58 字数 1696 阅读 15559评论 2喜欢 15 前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这 ...