“玲珑杯”ACM比赛 Round #18 A 前缀预处理 D dp
今天HHHH 考完了期末考试,他在教学楼里闲逛,他看着教学楼里一间间的教室,于是开始思考:
如果从一个坐标为 (x1,y1,z1)(x1,y1,z1) 的教室走到(x2,y2,z2)(x2,y2,z2) 的距离为 |x1−x2|+|y1−y2|+|z1−z2||x1−x2|+|y1−y2|+|z1−z2|
那么有多少对教室之间的距离是不超过RR 的呢?
-->
要小心的是R的范围 注意乘的时候会爆int
#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <map>
#include <set>
#include <queue>
#include <bitset>
#include <string>
#include <complex>
#define ll long long
using namespace std;
int t;
int n,q;
int mp[][][];
int x[],y[],z[];
int s[];
ll sum[];
int main()
{
scanf("%d",&t);
for(int i=;i<=t;i++)
{
for(int j=;j<=;j++)
for(int l=;l<=;l++)
for(int k=;k<=;k++)
mp[j][l][k]=;
for(int j=;j<=;j++)
sum[j]=;
scanf("%d %d",&n,&q);
int jishu=;
for(int j=;j<=n;j++)
{
scanf("%d %d %d",&x[j],&y[j],&z[j]);
if(mp[x[j]][y[j]][z[j]]==)
s[jishu++]=j;
mp[x[j]][y[j]][z[j]]++;
}
for(int j=;j<jishu;j++)
{
for(int k=j;k<jishu;k++)
{
if(j==k)
{
ll now=mp[x[s[j]]][y[s[j]]][z[s[j]]];
sum[]+=now*(now-)/;
}
else{
int dis=abs(x[s[j]]-x[s[k]])+abs(y[s[j]]-y[s[k]])+abs(z[s[j]]-z[s[k]]);
sum[dis]+=mp[x[s[k]]][y[s[k]]][z[s[k]]]*mp[x[s[j]]][y[s[j]]][z[s[j]]];
}
}
}
for(int j=;j<=;j++)
sum[j]+=sum[j-];
int exm;
for(int j=;j<=q;j++)
{
scanf("%d",&exm);
if(exm>)
printf("%lld\n",sum[]);
else
printf("%lld\n",sum[exm]);
}
}
return ;
}
今天HHHH 在操场上跑步,HHHH 作为一个爱运动的人,肯定会想方设法把跑步所消耗的能量减到最少.
现在这个操场上有nn 个可以休息的点,他们的坐标分别为x1,x2...xn(xi≤xi+1)x1,x2...xn(xi≤xi+1) ,HHHH 刚开始在 x1x1 ,并且他只能在这些点休息,在中途不能停下来,否则会因为旁边的音浪太强而被晃到.
如果HHHH 连续跑一段长度为ll 的距离,那么他将会消耗2l+a2l+a 的能量(aa 为HHHH 的可爱值)
现在给你这些点的坐标,请帮HHHH 计算他跑到xnxn 点所需要消耗的能量最少是多少.
-->
首先我们可以想到一个简单的dp方程
dp[i]=min(dp[j]+2^(dis[i]−dis[j]))+a
1.然后我们发现这个2^x很快就会比a 高到不知道哪里去,所以当这个距离超过一定值的时候肯定是分开
跑比较划算了,所以我们只需要枚举当前点前面的几十个点再转移一下就行了
2.我们也可以简单的推导一下发现这个dp方程是决策性单调的所以你懂的
#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <map>
#include <set>
#include <queue>
#include <bitset>
#include <string>
#include <complex>
#define ll long long
using namespace std;
int t;
int aa[];
int b[];
ll dp[];
map<int,int>mp;
int n,a;
int main()
{
scanf("%d",&t);
int ans=;
for(int j=;j<=t;j++)
{
scanf("%d %d",&n,&a);
int jishu=;
mp.clear();
for(int i=;i<=n;i++){
scanf("%d",&aa[i]);
if(mp[aa[i]]==){
b[jishu++]=aa[i];
mp[aa[i]]=;
}
}
sort(b,b+jishu);
for(int i=;i<jishu;i++){
dp[i]=1e18+;
}
dp[]=;
for(int i=;i<jishu;i++)
{
for(int j=i-;j>=;j--)
{
if(b[i]-b[j]>)
break;
dp[i]=min(dp[i],dp[j]+(1ll<<(b[i]-b[j]))+a);
}
}
printf("%lld\n",dp[jishu-]);
}
return ;
}
“玲珑杯”ACM比赛 Round #18 A 前缀预处理 D dp的更多相关文章
- “玲珑杯”ACM比赛 Round #18
“玲珑杯”ACM比赛 Round #18 Start Time:2017-07-15 12:00:00 End Time:2017-07-15 15:46:00 A -- 计算几何你瞎暴力 Time ...
- “玲珑杯”ACM比赛 Round #18 1147 - 最后你还是AK了(思维,边的贡献)
题目链接:http://www.ifrog.cc/acm/problem/1147 题解:这题很容易想到的是边的贡献也就是每条边最多被取到几次,和点的贡献类似,那些加边只要加在边贡献大的边上就行.然后 ...
- “玲珑杯”ACM比赛 Round #18 C -- 图论你先敲完模板(和题目一点关系都没有,dp)
题目链接:http://www.ifrog.cc/acm/problem/1146?contest=1020&no=2 题解:显然知道这是一道dp而且 dp[i]=min(dp[j]+2^(x ...
- 玲珑杯”ACM比赛 Round #18 A -- 计算几何你瞎暴力(瞎暴力)
题目链接:http://www.ifrog.cc/acm/problem/1143?contest=1020&no=0 题解:就是瞎暴力具体多暴力看一下代码就知道了. #include < ...
- “玲珑杯”ACM比赛 Round #1
Start Time:2016-08-20 13:00:00 End Time:2016-08-20 18:00:00 Refresh Time:2017-11-12 19:51:52 Public ...
- “玲珑杯”ACM比赛 Round #12题解&源码
我能说我比较傻么!就只能做一道签到题,没办法,我就先写下A题的题解&源码吧,日后补上剩余题的题解&源码吧! A ...
- “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】
A -- simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 SAMPLE INPUT ...
- “玲珑杯”ACM比赛 Round #19 B -- Buildings (RMQ + 二分)
“玲珑杯”ACM比赛 Round #19 Start Time:2017-07-29 14:00:00 End Time:2017-07-29 16:30:00 Refresh Time:2017-0 ...
- 玲珑杯”ACM比赛 Round #4 1054 - String cut 暴力。学到了扫描的另一种思想
http://www.ifrog.cc/acm/problem/1054 问删除一个字符后的最小循环节是多少. 比赛的时候想不出,不知道怎么暴力. 赛后看了别人代码才晓得.唉,还以为自己字符串还不错, ...
随机推荐
- 785. Is Graph Bipartite?
Given an undirected graph, return true if and only if it is bipartite. Recall that a graph is bipart ...
- 不相交集合ADT -数据结构(C语言实现)
读数据结构与算法分析 不相交集合 等价关系 满足三个性质 - 自反性 - 对称性 - 传递性 基本数据结构 基本思路 使用一个数组,下标表示该集合,内容表示指向的父亲 实现 类型声明 typedef ...
- Java学习计划
Java学习计划&书单--2018.10.13 W3C Struts教程 W3C Spring教程 W3C Hibernate教程 <深入JavaWeb技术内幕> Java Web ...
- MongoDB开启权限认证
MongoDB默认安装完后,如果在配置文件中没有加上auth = true,是没有用户权限认证的,这样对于一个数据库来说是相对不安全的,尤其是在外网的情况下. 接下来是配置权限的过程: //切入到 ...
- nginx启动、停止重启
启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /us ...
- 论文笔记:DeepFace: Closing the Gap to Human-Level Performance in Face Verification
2014 CVPR Facebook AI研究院 简单介绍 人脸识别中,通常经过四个步骤,检测,对齐(校正),表示,分类 论文主要阐述了在对齐和表示这两个步骤上提出了新的方法,模型的表现超越了前人的工 ...
- 初创型公司如何经济有效的申请邓白氏编码(DUNS)
听说有免费,和800元,1500元,上万元等不同的申请方式?听说申请完还要等十数个工作日让邓白氏和苹果的数据库同步.不同高低价格的申请方式得到的编码都能被苹果接受吗? http://www.zhihu ...
- Python 并行分布式框架:Celery 超详细介绍
本博客摘自:http://blog.csdn.net/liuxiaochen123/article/details/47981111 先来一张图,这是在网上最多的一张Celery的图了,确实描述的非常 ...
- C语言的问卷调查
1.你对自己的未来有什么规划?做了哪些准备? 未来想当一个网络工程师,为了这个目标我正在努力学习网络.网页及相关的知识. 2.你认为什么是学习?学习有什么用?现在学习动力如何?为什么? 学习就是不断尝 ...
- 期中HTML代码及技术博客
<!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...