当前位置: 首页 > news >正文

D. Speedbreaker Codeforces Round 975 (Div. 2)

 原题

D. Speedbreaker

 

解析

这道题题意就是要找出来有多少个起点, 可以每次向左或者右扩展一个城市, 对每个城市在时间 t 到达 a[i] 前扩展到第 i 个城市

双指针来做, l 为左边界, r 为右边界, 只要有一个边界的值大于等于长度, 就缩短边界, 每次检查时更新可取的起点区域(ll, rr)

如果有可以成功的起点, 那么这种起点的数目就是 rr - ll + 1

代码 

#include <bits/stdc++.h>
#define int long longusing namespace std;const int N = 200010;int n, m, k, q, ans;int a[N];void solve()
{cin >> n;for (int i = 1; i <= n; i ++ ){cin >> a[i];}int l = 1, r = n, ll = 1, rr = n;int ans = 0;while (l <= r){int len = r - l + 1;//      起点要在a[l] - 1步内到达 l, 以下也是同理ll = max(ll, l - a[l] + 1);ll = max(ll, r - a[r] + 1);rr = min(rr, l + a[l] - 1);rr = min(rr, r + a[r] - 1);if (a[l] >= len && a[r] >= len){l ++ ;r -- ;}else if (a[l] >= len){l ++ ;}else if (a[r] >= len){r -- ;}else{cout << 0 << "\n";return;}}cout << max(0ll, rr - ll + 1) << "\n";
}signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;cin >> T;while (T -- ){solve();}
}


http://www.mrgr.cn/news/40722.html

相关文章:

  • 前端工程化17-邂逅原生的ajax、跨域、JSONP
  • 工具按钮 QToolButton
  • 02.usePrevious
  • pnpm在monorepo架构下不能引用其他模块的问题
  • 第八篇——数列和级数(一):当下很重要,但趋势更重要
  • 【Linux】dd命令
  • 通信工程学习:什么是POP3邮局协议版本3
  • OLED显示屏中常见的3-spi和4-spi
  • 简单的微信小程序个人 个人详情页
  • local minima 的问题如何解决
  • MySQL优化相关(持续积累...)
  • Javascript-标准内置对象-值属性-globalThis-Infinity-Nan-undefined 手写实现globalThis功能
  • 笔墨歌盛世 丹青绘匠心,艺术赋能“百千万工程”
  • 【优选算法之哈希表】No.11--- 经典哈希表算法
  • [Python学习日记-34] 一篇文章让你弄懂 Python 中牛逼的递归函数
  • [Python学习日记-35] Python 中的内置函数(上)
  • 【Linux】进程+权限管理+软硬链接+其他命令
  • 合并两个有序数组(c语言)
  • CF1965D Missing Subarray Sum
  • E36.C语言模拟试卷1第一大题选题解析与提示(未完)