题意:有 2 行 n 列个点,每个点当经过 a[i][j] 秒时才能通过,从第一行第一列的点出发,每个点只能通过一次,求通过所有点的最少时间。

思路:因为每个点只能走一次,所以我们可以 S 形通过。当我们在一行中连续向右走两步,那么我们必须走到底,并从另一行返回。所以我们可以遍历求出从每一列走到底再返回的情况的时间,然后取最小值就是答案。我们维护一个数组 b[i][j],表示从第 j 列出发从另一行返回到第 j 列所需的最小时间(如果 j 是奇数,那么应该从第一行出发,否则从第二行出发),但是这个时间并不能保证第 j 列前所有的点已经解锁并且通过。所以我们再实时维护一个数为 cur,表示能通过第 j 列前面所有的点最小时间,这个时间不能保证后面所有的点解锁和通过。那么max(cur, b[i][j])就能保证第 j 列前后的点都能通过,所以max(cur, b[i][j])就是从第 j 列出发从另一行返回第 j 列的这种情况的时间,遍历所有 j 取最小值就是答案。

代码

#include<bits/stdc++.h>
#define pb push_back
#define all(x) x.begin(), x.end()
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 2e5 + 10, P = 1e9 + 7, mod = 998244353;
int a[3][N];
int b[3][N];
void solve(){int n;cin >> n;for(int i = 0; i <= 1; i++) for(int j = 1; j <= n; j++){cin >> a[i][j];if(i + j > 1) a[i][j]++;}b[0][n + 1] = b[1][n + 1] = 0;for(int j = n; j; j--){for(int i = 0; i <= 1; i++){b[i][j] = max(max(a[i][j] + (n - j) * 2 + 1, a[i ^ 1][j]), b[i][j + 1] + 1);}}int ans = 0x3f3f3f3f;int cur = 0;for(int j = 1; j <= n; j++){int k = j & 1;ans = min(ans, max(cur, b[k ^ 1][j]));cur = max(cur, max(a[k ^ 1][j] + (n - j) * 2 + 1, a[k][j] + (n - j) * 2));}cout << ans << endl;
}
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int tt;cin >> tt;while(tt--) {solve();}return 0;
}

CF 1716 C. Robot in a Hallway 思维 2000相关推荐

  1. codeforces 1716 C Robot in a Hallway

    input: 4 3 0 0 1 4 3 2 5 0 4 8 12 16 2 6 10 14 18 4 0 10 10 10 10 10 10 10 2 0 0 0 0 output: 5 19 17 ...

  2. cf Educational Codeforces Round 133 C. Robot in a Hallway

    原题: There is a grid, consisting of 2 rows and m columns. The rows are numbered from 1 to 2 from top ...

  3. CF #366(div.2) C 模拟,思维

    CF #366(div.2)  C.  Thor 题意:一个手机n个联系人,有q个操作.每次给出ty和ai,如ty==1,表示收到ai的一条信息:如ty==2,表示将ai发的信息都看掉:如ty==3, ...

  4. C. Robot in a Hallway Educational Codeforces Round 133 (Rated for Div. 2)dp

    dp问题 There is a grid, consisting of 22 rows and mm columns. The rows are numbered from 11 to 22 from ...

  5. 【CF#931.B】World Cup (思维,模拟)

    题干: The last stage of Football World Cup is played using the play-off system. There are n teams left ...

  6. CF 1300.B——Assigning to Classes【思维】

    题目传送门 Reminder: the median of the array [a1,a2,-,a2k+1][a1,a2,-,a_{2k+1}][a1,a2,-,a2k+1​] of odd num ...

  7. #CF div2 1670D Very Suspicious题解(思维+贪心)

    原题链接. 1.题意: 给个无穷大的正六边形棋盘,可以画若干条过六边形对立顶点的直线,问这些直线最多可以构成多少个三角形. 2.思路: 刚看题其实自己是挺蒙的,主要由于自己总局限于六边形之中,没有跳出 ...

  8. CF题目:1238C. Standard Free2play(思维,数论)

    题目链接:题目原文 题目大意: 起初玩家站在h高度的悬崖,接下来有h个平台,每个平台都有两个状态 (隐藏或者显现),然后给出n个平台,代表这些平台的起初状态是显现 的,对于玩家当前处于的平台x,玩家如 ...

  9. Codeforces edu C. Robot in a Hallway

    题意,给一个两行m列的矩阵,要求遍历每一个点并且每一个点只能遍历一遍,并且每个点在开始的ai,j时间内都会锁住不能访问,要求最短时间 思路:稍加思索就能发现,对于一个只有两行的图来说,只有两种方式能遍 ...

最新文章

  1. CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)
  2. extern用法汇总
  3. C语言经典例98-将字符转为大写字母并写入文件
  4. Bootstrap的目录结构
  5. 《实用软件架构:从系统环境到软件部署 》——2.4 架构视图与架构视点
  6. python读取windows日志_Python解析windows系统日志文件
  7. 学习笔记草稿版——体绘制中的光学模型
  8. java 验证码生成和验证
  9. HDU2015 偶数求和【入门】
  10. python学习笔记之读取配置文件【转自https://my.oschina.net/u/3041656/blog/793467】
  11. 查看谁连接oracle,oracle如何查看当前有哪些用户连接到数据库
  12. 时钟倒计时html,jQuery倒计时/计时器/时间插件
  13. PrimitiveCollection
  14. 第七周学习周报20181022-20181028
  15. NPDP产品经理认证:产品开发项目的风险评估
  16. 牛逼,一份基于SSM框架实现的支付宝支付功能,附完整源代码...
  17. (1)有一函数: 当x<1时,y=x 当1<=x<10时,y=2x-1 当x>=10时,y=3x-11 编写程序输入x,输出y的值
  18. 物联网毕设 -- 智能厨房检测系统
  19. 软件测试级别之系统测试
  20. 直板正胶技术:下旋球突击的要点

热门文章

  1. 双非计算机保研,无科研无竞赛,有希望保送211么?
  2. 最棒的机器学习(Python代码实现)
  3. centos 7 重启php-fpm,centos7如何启动和重启php-fpm服务
  4. 一副“无限手套”的诞生:548个传感器,人机合一
  5. SSD(2)代码分析
  6. Docker 端口映射
  7. python 易犯错误之input()
  8. zookeeper-3.5.5安装报错:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain-新版本zookeeper易犯错误
  9. 小点列表.Net/SQL
  10. 中国体育小镇建设运行态势分析及竞争战略规划报告2022-2028年版