codeforces 797E Array Queries
来源:互联网 发布:mac定制双用粉底液02 编辑:程序博客网 时间:2024/06/05 10:10
a is an array of n positive integers, all of which are not greater than n.
You have to process q queries to this array. Each query is represented by two numbers p and k. Several operations are performed in each query; each operation changes p to p + ap + k. There operations are applied until p becomes greater than n. The answer to the query is the number of performed operations.
The first line contains one integer n (1 ≤ n ≤ 100000).
The second line contains n integers — elements of a (1 ≤ ai ≤ n for each i from 1 to n).
The third line containts one integer q (1 ≤ q ≤ 100000).
Then q lines follow. Each line contains the values of p and k for corresponding query (1 ≤ p, k ≤ n).
Print q integers, ith integer must be equal to the answer to ith query.
31 1 131 12 13 1
211
Consider first example:
In first query after first operation p = 3, after second operation p = 5.
In next two queries p is greater than n after the first operation.
题目分析:
直接按照题目描述去做肯定会超时,需要用到dp来优化速度;
d[p][k] 表示 p, k需要的次数 状态转移如下:
d[p][k] = d[p+a[p]+k][k] + 1;
所有的k值保存不下, 这里我保存k值小于200的dp值, d[p][k] (k < 200), 当k大于200时直接模拟;
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = (int)1e5+5;int n, q, k, p;int d[maxn][205], a[maxn];int solve(int p, int k){ if(p > n) return 0; else if(k < 200){ if(d[p][k] != -1) return d[p][k]; else { d[p][k] = solve(p+a[p]+k, k)+1; return d[p][k]; } } else { return solve(p+a[p]+k, k)+1; }}int main(){ scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &a[i]); scanf("%d", &q); int ans = 0; memset(d, -1, sizeof(d)); for(int i = 0; i < q; ++i){ scanf("%d%d", &p, &k); ans = solve(p, k); printf("%d\n", ans); }}
- codeforces 797 E Array Queries
- codeforces 797E Array Queries
- Codeforces 797E Array Queries
- Codeforces 797E Array Queries
- codeforces 797E Array Queries
- Codeforces 797E Array Queries 分块思想
- Codeforces-797E-Array Queries(dp)
- codeforces 797e Array Queries 部分dp+暴力
- CodeForces 266E More Queries to Array...
- Educational Codeforces Round 19 E. Array Queries
- Educational Codeforces Round 19-E. Array Queries
- Codeforces Round #163 (Div. 2) E. More Queries to Array...
- codeforces 266E More Queries to Array 线段树
- 【CodeForces】266E More Queries to Array... 线段树
- CodeForces 266E More Queries to Array... 线段树
- Educational Codeforces Round 19-E. Array Queries(简单dp)
- Educational Codeforces Round 19 E. Array Queries(分块)
- E. Array Queries
- java多线程基础(一)
- tensorflow实现文本分类
- 工作流学习——Activiti流程变量五步曲
- pandas之DataFrame创建
- 浅谈Java并发编程
- codeforces 797E Array Queries
- java多态polymorphic多态的理解四之多态的优点
- java复习——类和对象
- 第2章 迭代、进化和敏捷
- 一、JMX官方指导文档 之 JMX概述
- LeetCode70. Climbing Stairs
- 学习淘淘商城第四十九课(搜索功能测试)
- HDUoj 4004 The Frog's Games ( 二分
- Java学习笔记(十一)--Set集合 Map集合