据说是CF div1的难度T^T 就只出了两个题,还是因为有一个是原题,昨天晚上做题居然又没想到dp滚动数组 dp啊 又爱又恨啊

第一次WA50%因为最大值取小了

https://www.nowcoder.com/acm/contest/56/B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

codeJan 非常喜欢旅行。现在有 n 个城市排在一条线上,并且 codeJan 的位置不和任何一个城市的位置重叠。
codeJan 想要游览 m 个城市,同时因为时间是不断变化的,游览一个城市多次也是允许的,但是不能永远待在一个城市,否则那样太无聊了。给出这些城市的位置,codeJan 想要知道游览 m 个城市至少需要走多少米?

输入描述:

第一行是一个T≤20代表测试组数。
每组第一行是三个正整数n,m,p,分别代表城市数量、codeJan想要浏览的城市数量和codeJan当前的位置(单位为米)。
第二行包含n个正整数pos[i]表示第i个城市的位置,单位为米。
输入保证pos[i]<pos[i+1](i∈[1,n−1]),并且p ≠ pos[i](i∈[1,n])。

输出描述:

对于每组输入数据输出一个正整数表示 codeJan 至少需要走的距离。
示例1

输入

3
2 2 2
1 3
2 2 1
2 3
4 3 4
1 3 5 6

输出

3
2
3

说明

对于第一个样例的坐标最优移动顺序可以是:2→3→1,移动距离一共是3。
对于第二个样例的坐标最优移动顺序可以是:1→2→3,移动距离一共是2。
对于第三个样例的坐标最优移动顺序可以是:4→5→6→5,移动距离一共是3。

备注:

2≤n≤105,1≤m≤105 ,1≤p,pos[i]≤109。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
long long dp[2][100009],num[100009];
int n,m,t;
long long p;
int main()
{// freopen("cin.txt","r",stdin);scanf("%d",&t);while(t--){scanf("%d%d%lld",&n,&m,&p);int pos=0;for(int i=1;i<=n;i++){scanf("%lld",&num[i]);if(num[i]<p) pos=i;}for(int i=0;i<2;i++)for(int j=0;j<100009;j++)dp[i][j]=2223372036854775807LL;for(int i=1;i<=n;i++){if(i==pos) dp[1][i]=p-num[i];else if(i==pos+1) dp[1][i]=num[i]-p;//else dp[1][i]=0LL;}for(int i=2;i<=m;i++){for(int j=1;j<=n;j++){if(j==1)dp[i&1][j]=dp[(i+1)&1][j+1]+num[j+1]-num[j];else if(j==n)dp[i&1][j]=dp[(i+1)&1][j-1]+num[j]-num[j-1];elsedp[i&1][j]=min(dp[(i+1)&1][j+1]+num[j+1]-num[j],dp[(i+1)&1][j-1]+num[j]-num[j-1]);}}long long len=2223372036854775807LL;//  printf("%lld\n",len);for(int i=1;i<=n;i++)len=min(len,dp[m&1][i]);printf("%lld\n",len);}return 0;
}

看题解发现有更简单的

可以想象的是如果 m 足够大,codeJan 最后肯定会选择在相邻的两个城市来回走。所以可
以枚举两个相邻的城市
(实际上应该是距离最小的两个城市)。并且直接” 奔向” 这两个城市的应该是最吼的!但是
还要考虑,可能先往后退到 一个城市,再” 奔向” 枚举的城市。
举个例子就明白了:n = 3,m = 10, p = 2,三个城市的位置是 1 10 14。
那么应该先退回到 1,然后再在 10 和 14 之间来回走。
时间复杂度:O(n)
题解说的少情况 看代码  不用两个点之间来回走的特判
#include <bits/stdc++.h>
using namespace std;
int T,n,m,p,a[200001];
int main()
{for(scanf("%d",&T);T;T--){scanf("%d%d%d",&n,&m,&p);int pos=0;for(int i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]<p) pos=i;}long long ret=1000000000000000LL;for(int i=1;i<=n;i++){long long ans=abs(p-a[i]);int step=max(pos-i+1,i-pos);long long luogan=min(a[i]-a[i-1],a[i+1]-a[i]);if(i==1) luogan=a[2]-a[1];if(i==n) luogan=a[n]-a[n-1];if(step<=m)ret=min(ret,ans+luogan*(m-step));if(step<m && pos!=0 && pos!=n){if(a[i]>p)ret=min(ret,ans+luogan*(m-step-1)+(p-a[pos])*2);elseret=min(ret,ans+luogan*(m-step-1)+(a[pos+1]-p)*2);}}printf("%lld\n",ret);}return 0;
}

Wannafly挑战赛7 codeJan与旅行相关推荐

  1. Wannafly挑战赛24

    Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...

  2. Wannafly挑战赛22游记

    Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...

  3. [Wannafly挑战赛2D-Delete]最短路

    [Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...

  4. Wannafly挑战赛19

    Wannafly挑战赛19 A. 队列Q 需要支持把一个元素移到队首,把一个元素移到队尾,移到队首就直接放到队首前面那个位置,原位置标为0,队尾同理. #include <bits/stdc++ ...

  5. Wannafly挑战赛18

    Wannafly挑战赛18 A. 序列 先考虑暴力,相邻两个树之间乘上给定的三种数,递推出下一个位置填什么,然后再check一下,最后一位是否为1即可.这样时间显然不行,但是给我们一种思路,就是中间的 ...

  6. Wannafly 挑战赛27 题解

    Wannafly 挑战赛27 题目连接 https://www.nowcoder.com/acm/contest/215#question A.灰魔法师 题目 题解 考虑到可能的完全平方数只有4004 ...

  7. Wannafly挑战赛18B 随机数

    Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...

  8. Wannafly挑战赛14 A-直角三棱锥

    Wannafly挑战赛14 A-直角三棱锥 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 题目描述 在三维空间中,平面 x = 0, y = ...

  9. Wannafly挑战赛27 C蓝魔法师

    链接Wannafly挑战赛27 C蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于\(k\),\(n,k\leq 2*10^3\) 假设我们正在考虑\(i\)这个子树,那么 ...

最新文章

  1. TableLayoutPanel
  2. 独家发布 | 产品经理生存现状
  3. GUN Make指南
  4. 微型php框架 include/conf.class.php
  5. NAPI 方式的实现
  6. Android应用--简、美音乐播放器增加音量控制
  7. 【Flutter】基础组件【01】Text
  8. 2017计算机办公自动化试题,2017办公自动化考试试题
  9. 方舟生存进化刷精英恐龙代码
  10. 证券分析软件测试面试题,光大证券面试经验
  11. Linux(九、十)文件权限及网络配置管理
  12. 广科计算机专业学费,电子科技大学各专业收费明细表
  13. 【经典面试题】css如何画一个三角形?
  14. AutoCAD 2020安装失败(错误代码:1603)的解决方法/对于Autodesk系列产品都有效
  15. dva开源项目_后台前端管理系统,基于react、typescript、antd、dva及一些特别优秀的开源库实现...
  16. 利用python的scrapy框架爬取google搜索结果页面内容
  17. 机器学习-新闻分类案例
  18. jsTree插件简介(四)
  19. 数据ETL——使用R语言对身份证进行校验,排序筛选等操作
  20. 【Spring学习笔记】AOP

热门文章

  1. 高并发场景下对热点数据的处理
  2. 11.网络编程的学习总结
  3. vue引用动态gif图片
  4. 历年来的诺贝尔文学奖得主及作品,哪些最受欢迎?
  5. 使用哈工大LTP测试分词并且增加自定义字典
  6. 通过深度卷积网络,把移动设备上的照片提高到单反级别画质(已开源)
  7. 耳机识别,nokia和iPhone风格的区别
  8. PS、PCL、GDI
  9. CSS微课_W3CSchool笔记
  10. 【学习笔记】计算机听觉