计蒜课/ 微软大楼设计方案/中等(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\) .试将其划分为两个严格上升子序列,并使其长度差最小. 输入格式 输入包含多组数据. 数据的第一行为一个正整 ...
随机推荐
- JavaScript及jQuery学习小结
最近几天学习了很多关于JavaScript和jQuery的文章,稍作梳理后,总结如下. 1.jQuery入门系列 环境搭建 只需引用一个jQuery库文件,即可完成jQuery的环境搭建. 选择器 j ...
- 蓝牙 CTS 测试
安装蓝牙测试安装包 之后 . 安卓包名字 android-cts-6.0_r19-linux_x86-x86.zip 解压之后 /cts/android-cts/tools/ 目录下 运行 ./ ...
- main方法的参数
敲例子的时候无意中把主方法的参数给落下了,当时没有发现,保存之后就去编译,运行了,通常情况下编译没有错误那胜利就在掌握之中了,没想到这次我竟然在"不一般"的行列中,编译无误,运行出 ...
- 【tensorflow】tensorflow学习记录——安装、第一个程序篇
机器学习,人工智能往后肯定是一个趋势,现阶段有必要研究一两个人工智能的工具,以免自己技术落伍,其中tensorflow就是一个很不错的项目,有谷歌开发后开源,下面开始学习安装和使用 安装篇: 很不幸, ...
- 【Leetcode-easy】Remove Element
思路:遍历数组,count保存下一个元素的位置,如果不与该元素相同,那么将该数保存在count位置,并且count++,否则,继续遍历. public int removeElement(int[] ...
- javah生成带有包名的头文件
无包名情况 多数的demo都是基于这种条件,假设在目录jni/下有一个包含native方法的文件Hello.class.进入jni/目录,直接执行javah Hello,就可以在jni/目录下生成文件 ...
- 畅游HttpCore
欢迎 非常欢迎阅读本文,本文主要介绍HttpCore是如何工作的. 你应该知道HTTP是一种用于在客户端与服务端进行消息交换的协议.它使用的特别广泛,它通常运行在TCP/IP或者安全的TLS/SSL之 ...
- Kbuntu16.04添加工作空间
工作空间是一个非常方便的功能,可以让开发者每次只聚焦一个屏幕,又能在各个空间中来回切换.有一种屏幕被扩展的感觉. Kbuntu默认只有一个工作空间,需要按如下方式添加: System settings ...
- IDEA 设置忽略那些文件不提交到SVN服务器
- Zookeeper用来干什么?
在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...