“玲珑杯”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 问删除一个字符后的最小循环节是多少. 比赛的时候想不出,不知道怎么暴力. 赛后看了别人代码才晓得.唉,还以为自己字符串还不错, ...
随机推荐
- python程序设计——面向对象程序设计:方法
类中定义的方法分为四类:公有方法,私有方法,静态方法,类方法 公有方法.私有方法都属于对象,私有方法的名字以"__"开始 每个对象都有自己的公有方法和私有方法,这两类方法可以访问属 ...
- Python 函数内省
函数内省(function introspection) 除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查看函数具有的属性: def factorial(n): r ...
- Java 通过先序中序序列生成二叉树
题目 二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证. 输入: 1 2 3 4 5 6 7 8 9 10 3 2 5 4 1 7 8 6 10 9 ...
- Java中的静态变量static
package com.wangcf; public class Test { String name="你好"; static String sex="男"; ...
- 《我是IT小小鸟》阅读心得
虽然读这本书是老师布置的作业,但是读了几页后就被书中的内容所吸引住了.或许是因为我也是学这个专业的,所以书中的一些内容让我觉得非常的有兴趣.作为一个学习软件工程的大一学生还没真正的认识到这个专业的深奥 ...
- JavaWeb应用的生命周期
JavaWeb应用的生命周期是由Servlet容器来控制. 启动阶段 (1)读取web.xml配置文件数据 (2)为JavaWeb应用创建一个ServletContext对象 (3)对所有的Filte ...
- 使用fprof基本步骤
$erl -name a@localhost -setcookie abc -remsh b@localhost >fprof:trace([start, {file, "/home/ ...
- 11月14号站立会议(从即日14号起到24号截至为final阶段工作期)
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 代码地址:HTTPS:https://git.coding.net/shenbaishan/GIFT. ...
- 爬虫学习之-sqlite3
SQLlte数据类型 SQLite能保存什么样的数据类型 ?? 可以保存空值.整数.浮点数.字符串和blob. 什么是blob ?? 是二进制大对象.例如图片.音乐.zip文件. 什么是游标 ?? 游 ...
- 关于SIGPIPE信号
对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的"四次握手"关闭. TCP是全双工的信道, ...