计蒜课/ 微软大楼设计方案/中等(xjb)
题目链接:https://nanti.jisuanke.com/t/15772
题意:中文题诶~
思路:对于坐标为p1(x1, y1), p2(x2, y2) 的两个核心, 其中 x1 <= x2 用 d(p1, p2) 表示两者间最矮的大楼,则需要时间为:
对于d(p1, p2) >= min(y1, y2)情况,cnt = abs(x2 - x1) + abs(y2 - y1)
对于d(p1, p2) < min(y1, y2)情况,cnt = y1 + y2 - 2*d(p1, p2) + abs(x2 -x1)
所以对于中等难度,可以枚举所有核心组合的情况,对于当前情况,若 cnt <= k,则计数加一;
那么现在问题为求 d,可以用 dis[i][j] 存储前 i 个元素 j 出现的次数,那么只需要枚举 h 即可得到 d(p1, p2),而 h <= 20,显然是可行的...
代码:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std; const int MAXN = 2e5 + ;
int a[MAXN], x[MAXN], y[MAXN], dis[MAXN][]; int main(void){
int n, k, m;
scanf("%d%d", &n, &k);
for(int i = ; i <= n; i ++){
scanf("%d", &a[i]);
for(int j = ; j <= ; j ++){
if(j == a[i]) dis[i][j] = dis[i - ][j] + ;
else dis[i][j] = dis[i - ][j];
}
}
scanf("%d", &m);
for(int i = ; i < m; i ++){
scanf("%d%d", &x[i], &y[i]);
}
int ans = ;
for(int i = ; i < m; i++){
for(int j = i + ; j < m; j++){
int cnt1 = x[i], cnt2 = x[j];
if(cnt1 > cnt2){
int cc = cnt1;
cnt1 = cnt2;
cnt2 = cc;
}
if(cnt1 == cnt2){
if(abs(y[i] - y[j]) <= k) ans++;
}else{
int d;
int cc = min(y[i], y[j]);
for(d = ; d <= ; d ++){
if(dis[cnt2][d] - dis[cnt1 - ][d] > ){
break;
}
}
if(cc <= d){
int cnt = abs(cnt2 - cnt1) + abs(y[i] - y[j]);
if(cnt <= k) ans ++;
}else{
int cnt = y[i] + y[j] - *d + abs(cnt2 - cnt1);
if(cnt <= k) ans ++;
}
}
}
}
printf("%d\n", ans);
return ;
}
计蒜课/ 微软大楼设计方案/中等(xjb)的更多相关文章
- 计蒜客 微软大楼设计方案(RMQ)
题目链接 微软大楼设计方案 中文题就不说题意了~ 首先是简单版本 满足$1 <= n, m <= 50$ 那么设$c[i][j]$为从第$i$幢楼到第$j$幢楼的最低的那幢楼的高度 计算两 ...
- German Collegiate Programming Contest 2015 计蒜课
// Change of Scenery 1 #include <iostream> #include <cstdio> #include <algorithm> ...
- 算法复习周------“动态规划之‘最长公共子序列’”&&《计蒜课》---最长公共子串题解
问题描述: 这个问题其实很容易理解.就是给你两个序列X={x1,x2,x3......xm} Y={y1,y2,y3......ym},要求找出X和Y的一个最长的公共子序列. 例:Xi={A, B, ...
- 计蒜课--2n皇后、n皇后的解法(一般操作hhh)
给定一个 n*nn∗n 的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入 nn 个黑皇后和 nn个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条斜线(包括正负斜线)上,任意的两个白皇后都 ...
- 微软大楼设计方案(中等) 推公式+RMQ问题
近日,微软新大楼的设计方案正在广泛征集中,其中一种方案格外引人注目.在这个方案中,大楼由 nn 栋楼组成,这些楼从左至右连成一排,编号依次为 11 到 nn,其中第 ii 栋楼有 h_ihi层. ...
- 动态规划---等和的分隔子集(计蒜课)、从一个小白的角度剖析DP问题
自己还是太菜了,算法还是很难...这么简单的题目竟然花费了我很多时间...在这里我用一个小白的角度剖析一下这道题目. 晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等 ...
- 计蒜课/UCloud 的安全秘钥(hash)
题目链接:https://nanti.jisuanke.com/t/15768 题意:中文题诶- 思路:直接hash就好了,当时zz了没想到... 代码: #include <iostream& ...
- (计蒜客)UCloud 的安全秘钥
UCloud 的安全秘钥 题意 给出一个数组 s 串,和数组 t 串,那么如果两者长度相同且两者所含的数字全部相同,则说这两个串相似. 给定原始串 S ,以及 m 个询问 T 串,问 S 串有多少个连 ...
- 计蒜之道 百度AI小课堂-上升子序列
计蒜之道 百度AI小课堂-上升子序列 题目描述 给一个长度为 \(n\) 的数组 \(a\) .试将其划分为两个严格上升子序列,并使其长度差最小. 输入格式 输入包含多组数据. 数据的第一行为一个正整 ...
随机推荐
- Redis3.x HA 方案(基于 Sentinel 方式)
第一部分 Redis-HA 搭建 一.Redis-HA 拓扑 一主两从,主从复制,故障时主从切换 三个Redis节点 + Sentinel 节点 Master 127.0.0.1 ...
- Maximum Subsequence Sum 【DP】
Given a sequence of K integers { N1, N2, -, NK }. A continuous subsequence is defined to be ...
- Appium移动自动化配置-ios&安卓
官网安装参考:https://www.npmjs.com/package/appium Appium安装 1.安装nodejs 2.安装appium iOS侧环境安装 1.安装xcode 2.安装Xc ...
- Django 后台管理 之登录和注销
Session: session是服务器端生成保存的一个键值对 , session内部机制依赖于cookie . 用户登录后返回给客户端一个随机字符串,客户端带着随机字符串访问服务器,用于验证 ...
- python学习笔记:第五天( 列表、元组)
Python3 列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见 ...
- Jmeter-聚合报告
线程组右键--添加--监听器--聚合报告 Aggreagete Report:jmeter最常用的一个Listener,“聚合报告”. Label:每个jmeter的element(例如HTTP Re ...
- linux安装与卸载软件
在ubuntu系统中,通常使用apt-get命令完成对软件的安装与卸载 安装的软件通常都放置在一些源中,国内有很多镜像源供下载使用,而系统设置的源保存在目录/etc/apt/sources.list文 ...
- 写个sleep玩玩
static void sig_when_weakup(int no){ printf("weakup weakup\n"); longjmp(buf, ); } void wea ...
- struct tm 和 time_t 时间和日期的使用方法(转
关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元) .概念 在C/C++中,对字符串的操作有很多值得注意的问题,同样,C ...
- ambari 维护模式及reset API 操作
Ambari 的维护模式(Maintenance Mode)介绍 Ambari 提供的 Maintenance Mode,是为了让用户在调试或者维护 Service 的时候,抑制不必要的告警(Aler ...