题目链接: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)的更多相关文章

  1. 计蒜客 微软大楼设计方案(RMQ)

    题目链接 微软大楼设计方案 中文题就不说题意了~ 首先是简单版本 满足$1 <= n, m <= 50$ 那么设$c[i][j]$为从第$i$幢楼到第$j$幢楼的最低的那幢楼的高度 计算两 ...

  2. German Collegiate Programming Contest 2015 计蒜课

    // Change of Scenery 1 #include <iostream> #include <cstdio> #include <algorithm> ...

  3. 算法复习周------“动态规划之‘最长公共子序列’”&&《计蒜课》---最长公共子串题解

    问题描述: 这个问题其实很容易理解.就是给你两个序列X={x1,x2,x3......xm} Y={y1,y2,y3......ym},要求找出X和Y的一个最长的公共子序列. 例:Xi={A, B, ...

  4. 计蒜课--2n皇后、n皇后的解法(一般操作hhh)

    给定一个 n*nn∗n 的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入 nn 个黑皇后和 nn个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条斜线(包括正负斜线)上,任意的两个白皇后都 ...

  5. 微软大楼设计方案(中等) 推公式+RMQ问题

    近日,微软新大楼的设计方案正在广泛征集中,其中一种方案格外引人注目.在这个方案中,大楼由 nn 栋楼组成,这些楼从左至右连成一排,编号依次为 11 到 nn,其中第 ii 栋楼有 h_ih​i​​层. ...

  6. 动态规划---等和的分隔子集(计蒜课)、从一个小白的角度剖析DP问题

    自己还是太菜了,算法还是很难...这么简单的题目竟然花费了我很多时间...在这里我用一个小白的角度剖析一下这道题目. 晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等 ...

  7. 计蒜课/UCloud 的安全秘钥(hash)

    题目链接:https://nanti.jisuanke.com/t/15768 题意:中文题诶- 思路:直接hash就好了,当时zz了没想到... 代码: #include <iostream& ...

  8. (计蒜客)UCloud 的安全秘钥

    UCloud 的安全秘钥 题意 给出一个数组 s 串,和数组 t 串,那么如果两者长度相同且两者所含的数字全部相同,则说这两个串相似. 给定原始串 S ,以及 m 个询问 T 串,问 S 串有多少个连 ...

  9. 计蒜之道 百度AI小课堂-上升子序列

    计蒜之道 百度AI小课堂-上升子序列 题目描述 给一个长度为 \(n\) 的数组 \(a\) .试将其划分为两个严格上升子序列,并使其长度差最小. 输入格式 输入包含多组数据. 数据的第一行为一个正整 ...

随机推荐

  1. Java for LeetCode 138 Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point t ...

  2. PAT 甲级 1007. Maximum Subsequence Sum (25) 【最大子串和】

    题目链接 https://www.patest.cn/contests/pat-a-practise/1007 思路 最大子列和 就是 一直往后加 如果 sum < 0 就重置为 0 然后每次 ...

  3. js正則函數 match、exec、test、search、replace、split 使用介紹集合

    match 方法 使用正則表達式模式對字元串執行查找,並將包含查找的結果作為數組返回. stringObj.match(rgExp) 參數 stringObj 必選項.對其進行查找的 String 對 ...

  4. (C)结构数组

    结构数组 对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS]; 这两个数组大小相同,因此 可以用另一 ...

  5. MVC+Ext.net零基础学习记录(四)

    在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...

  6. Ruby 仿 C 结构体:CStruct 的一些例子

    1. [代码]最简单的例子     # CStruct Examplesrequire 'cstruct' # example:# struct Point in C\C++        (32-b ...

  7. 2013各大IT公司薪资标准

    以此鼓励自己 :http://jinhua.19lou.com/forum-874-thread-115901362964023509-1-1.html   以下三个是老大级别的公司   [微软] 研 ...

  8. 练习E-R图书管理数据库

  9. docker镜像管理基础

    [root@node01 ~]# docker pull quay.io/coreos/flannel:v0.10.0-amd64 v0.10.0-amd64: Pulling from coreos ...

  10. 关于Tensorflow 加载和使用多个模型的方式

    在Tensorflow中,所有操作对象都包装到相应的Session中的,所以想要使用不同的模型就需要将这些模型加载到不同的Session中并在使用的时候申明是哪个Session,从而避免由于Sessi ...