CF1137A/1138C Skyscrapers
排序+数据结构
将每一行(每一列)都排个序,并将原位置的在这一行(列)中的排行记录在一个数组里
注意,要将楼高度相同的元素看作一个元素
如 1 1 4 5 6 8 8,则排行是
1 1 2 3 4 5 5
处理好后,枚举每一个十字路口,
若当前的处在的行的排行大于列的排行,则当前这个元素之后的列中元素应以行的排行开始依次递增,
若当前的处在的行的排行小于列的排行,则当前这个元素之后的行中元素应以列的排行开始依次递增,
注意,若当前的处在的行的排行等于列的排行时,则要从如上两个方面同时考虑,取最大值。
#include <bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010],hh[1010][1010],ll[1010][1010];
int mh[1500],ml[1500];
struct node
{
int wh,num;
};
vector <node> h[1010],l[1010];
bool cmp(node a,node b)
{
return a.num<b.num;//以高度降序排序
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
}
}
for (int i=1;i<=n;i++)//处理行的情况
{
node t;
for (int j=1;j<=m;j++)
{
t.num=a[i][j];
t.wh=j;
h[i].push_back(t);
}
sort(h[i].begin(),h[i].end(),cmp);
int how=0;
for (int j=0;j<m;j++)
{
if (j!=0)
{
if (h[i][j-1].num==h[i][j].num)
how++;//重复的有多少个
}
hh[i][h[i][j].wh]=j+1-how;//记录排行
}
mh[i]=m-how;//最大值
}
for (int j=1;j<=m;j++)//处理列的情况
{
node t;
for (int i=1;i<=n;i++)
{
t.num=a[i][j];
t.wh=i;
l[j].push_back(t);
}
sort(l[j].begin(),l[j].end(),cmp);
int how=0;
for (int i=0;i<n;i++)
{
if (i!=0)
{
if (l[j][i-1].num==l[j][i].num)
how++;
}
ll[l[j][i].wh][j]=i+1-how;
}
ml[j]=n-how;
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
int cha;
if (hh[i][j]==ll[i][j])//如上
{
int cha1;
cha1=mh[i]-hh[i][j];
cha=ml[j]-ll[i][j];
printf("%d ",max(max(hh[i][j]+cha,mh[i]),max(ll[i][j]+cha1,ml[j])));
}
else
if (hh[i][j]>ll[i][j])
{
cha=ml[j]-ll[i][j];
printf("%d ",max(hh[i][j]+cha,mh[i]));
}
else
if (hh[i][j]<ll[i][j])
{
cha=mh[i]-hh[i][j];
printf("%d ",max(ll[i][j]+cha,ml[j]));
}
}
printf("\n");
}
}
CF1137A/1138C Skyscrapers的更多相关文章
- uoj #111. 【APIO2015】Jakarta Skyscrapers
#111. [APIO2015]Jakarta Skyscrapers 印尼首都雅加达市有 NN 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 00 到 N−1N−1.除了这 NN 座摩 ...
- Skyscrapers Aren’t Scalable
 Skyscrapers Aren't Scalable Michael Nygard WE oFTEn HEAR SoFTWARE EnginEERing CoMpAREd to building ...
- Skyscrapers Covered in Solar Pancels【太阳能电池板覆盖的摩天大楼】
Skyscrapers Covered in Solar Panels An office tower on Miller Stree in Manchester is completely cove ...
- Codeforces Round #622(Div 2)C2. Skyscrapers (hard version)
题目链接 : C2. Skyscrapers (hard version) 题目描述 : 与上一道题类似,只是数据范围变大, 5e5, 如果用我们原来的方法,铁定是超时的. 考察点 : 单调栈,贪心, ...
- Codeforces Round #622(Div 2) C1. Skyscrapers (easy version)
题目链接: C1. Skyscrapers (easy version) 题目描述: 有一行数,使得整个序列满足 先递增在递减(或者只递增,或者只递减) ,每个位置上的数可以改变,但是最大不能超过原来 ...
- Codeforces Round #622 C2.Skyscrapers (hard version)
This is a harder version of the problem. In this version n≤500000n≤500000 The outskirts of the capit ...
- Codeforces Round #622 (Div. 2) C1. Skyscrapers (easy version)(简单版本暴力)
This is an easier version of the problem. In this version n≤1000n≤1000 The outskirts of the capital ...
- Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version)(单调栈,递推)
Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version) 题意: 你是一名建筑工程师,现给出 n 幢建筑的预计建设高度,你想建成峰状, ...
- UOJ 216 Jakarta Skyscrapers
http://uoj.ac/problem/216 题意:给定A,B,C,如果集合中有数i,j(i>j),那么集合就会增加i-j这个数,问有没有在初始集合为{A,B}400步内生成C的方案. 思 ...
随机推荐
- CF538B Quasi Binary 思维题
题目描述 给出一个数 \(n\),你需要将 \(n\) 写成若干个数的和,其中每个数的十进制表示中仅包含\(0\)和\(1\). 问最少需要多少个数 输入输出格式 输入格式: 一行 一个数 \(n(1 ...
- sublime text3配置Python2、Python3的编译环境
由于Python2.Python3使用量都很高,Python3虽然是未来趋势,但是目前个别库还是只支持Python2.所以,很多人会选择在电脑上安装两个版本的Python,那么使用sublime执行代 ...
- windows.h系统函数
转载:https://blog.csdn.net/u010756046/article/details/82432312 // Windows系统函数.cpp: 定义控制台应用程序的入口点.// #i ...
- 彻底理解红黑树及JavaJDK1.8TreeMap源码分析
1. 定义 红黑树也是二叉查找树,我们知道,二叉查找树这一数据结构并不难,而红黑树之所以难是难在它是自平衡的二叉查找树,在进行插入和删除等可能会破坏树的平衡的操作时,需要重新自处理达到平衡状态.红黑树 ...
- ASP。使用依赖注入的asp.net Core 2.0用户角色库动态菜单管理
下载source code - 2.2 MB 介绍 在开始这篇文章之前,请阅读我的前一篇文章: 开始使用ASP.NET Core 2.0身份和角色管理 在上一篇文章中,我们详细讨论了如何使用ASP.N ...
- Spring IOC 容器预启动流程源码探析
Spring IOC 容器预启动流程源码探析 在应用程序中,一般是通过创建ClassPathXmlApplicationContext或AnnotationConfigApplicationConte ...
- 多测试_linux_003_肖sir
一.linux 介绍os 操作系统:windows,dos,android ,ios,unix ,linux linux系统:是一个免费,开源的操作系统,能多cpu,多用户,多线程的操作系统,比win ...
- Git之多人协同开发
一.获取远程库信息 1 2 3 $ git remote -v origin https://github.com/xxxxx/node.git (fetch) origin https://gi ...
- 基于Python的接口自动化实战-基础篇之读写配置文件
引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值.为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这些变量和变 ...
- 【原创】xenomai3.1+linux构建linux实时操作系统-基于X86_64和arm
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 一.概要 二.环境准备 1.1 安装内核编译工 ...