Educational Codeforces Round 19 E. Array Queries

https://codeforces.com/contest/797/problem/E

其实是个诈骗题,我们可以思考一下暴力有哪些解法。

  1. 对于一个询问直接向后暴力的查询
  2. 从后向前枚举n,并预处理出每个k需要多少步。

我们可以按照k 分类,如果k<n我们预处理,否则我们暴力的查询,这样的话,复杂度是O(nn)

#include <bits/stdc++.h> using namespace std; using vi = vector<int>; const int inf = INT_MAX / 2; int main() { int n; cin >> n; vector<int> a(n + 1); for(int i = 1; i <= n; i ++) cin >> a[i]; int K = sqrt(n); vector f(K + 1, vi(n + 1)); for(int i = 1; i <= K; i ++) { for(int j = n, l; j >= 1; j --) { l = j + a[j] + i; if(l > n) f[i][j] = 1; else f[i][j] = f[i][l] + 1; } } int q; cin >> q; for(int p, k, cnt; q; q --) { cin >> p >> k; if(k <= K) { cout << f[k][p] << "\n"; } else { cnt = 0; while(p <= n) { p = p + a[p] + k; cnt ++; } cout << cnt << "\n"; } } return 0; }

__EOF__

本文作者PHarr
本文链接https://www.cnblogs.com/PHarr/p/18512577.html
关于博主:前OIer,SMUer
版权声明CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
posted @   PHarr  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示