题意:给你一个长度为n的序列,有q次询问,每次询问给出两个位置x和y(x < y),问是否可从x到达y?可达的定义是:如果存在一个序列(假设长度为k),其中p1 = x, pk = y,并且这个序列中a[pi] & a[p(i + 1)] != 0。

思路:设dp[i][j]是从i位置及其之后的位置中,二进制位的第j位为1,并且可达的最靠前的位置,设last[j]是已经扫描过的数中第j位为1的最靠前的位置。我们考虑怎么求dp[i][j]。首先,如果a[i]的二进制位的第j位为1,那么dp[i][j] = i,而且i位置到last[j]一定是可达的,那么我们可以用dp[last[j]][k]来更新dp[i][k]。询问的时候,如果a[y]的第j位为1,并且dp[x][j] <= y, 那么就可达,否则不可达。

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 300010;
int dp[maxn][20], last[20];
int a[maxn];
int main() {int n, T;scanf("%d%d", &n, &T);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);}for (int i = 0; i < 20; i++) {last[i] = n + 1;dp[n + 1][i] = n + 1;}for (int i = n; i >= 1; i--) {for (int j = 0; j < 20; j++) {dp[i][j] = n + 1;}for (int j = 0; j < 20; j++) {if((a[i] >> j) & 1) {for (int k = 0; k < 20; k++) {dp[i][k] = min(dp[i][k], dp[last[j]][k]);}last[j] = i;dp[i][j] = i;}}}while(T--) {int x, y;scanf("%d%d", &x, &y);bool flag = 0;for (int i = 0; i < 20; i++) {if(((a[y] >> i) & 1) && dp[x][i] <= y) {flag = 1;break;}}if(flag) printf("Shi\n");else printf("Fou\n");}
}

  

转载于:https://www.cnblogs.com/pkgunboat/p/10932964.html

Codeforces 1169E DP相关推荐

  1. c语言鸽巢原理,Codeforces 1188C DP 鸽巢原理

    题意:定义一个序列的beauty值为序列中元素之差绝对值的最小值,现在给你一个数组,问所有长度为k的子序列的beauty值的和是多少? 思路:(官方题解)我们先解决这个问题的子问题:我们可以求出bea ...

  2. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  3. CodeForces 567F DP Mausoleum

    本着只贴代码不写分析的题解是在耍流氓的原则,还是决定写点分析. 思路很清晰,参考的官方题解,一下文字仅对题解做一个简要翻译. 题意: 有1~n这n个数,每个数用两次.构成一个长为2n的序列,而且要求序 ...

  4. G - Hard problem CodeForces - 706C DP

    #include<bits/stdc++.h> using namespace std;typedef long long ll; string a[100000 +10], b[1000 ...

  5. Codeforces 1096F(dp + 树状数组)

    题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...

  6. Codeforces 1105C (DP)

    题面 传送门 分析 这种计数问题,要不是纯数学推公式,要不就是dp 先处理出[l,r]中除3余0,1,2的数的个数,记为cnt0,cnt1,cnt2 设\(dp[i][j]\)表示前i个数的和除3余j ...

  7. Codeforces 319C DP 斜率优化

    题意:在一颗森林有n颗数,编号从1到n,第i棵树高度是a[i].有一个伐木工想要砍伐这片森林,它的电锯每次可以将树的高度减少1,然后就必须要充电,充电的代价是他已经砍倒的树种编号最大的那颗树的代价(b ...

  8. E. Pencils and Boxes codeforces(思维+dp)

    题目链接:E. Pencils and Boxes 题意: 给出n个数字,分组,每组大小>=k,并且同一组内任意两个数字大小不能超过d 思路: 先从小到大排序.然后dp.起点肯定是第一个数字,然 ...

  9. Dynasty Puzzles CodeForces - 191A+DP二维

    题意:一共给你N个字符串,如果一个字符串的尾部字母和一个字符串的首部字母相同,/那么两个字符串就可以拼接起来,问最长的首尾字母相同的字符串的长度为多少. //思路:DP便利一遍就够了 ,dp[a][b ...

最新文章

  1. go get 无法下载问题解决方案及下载 aliyun-oss-go-sdk incompatible.info
  2. 【神回复】看 App 运营高手如何应对六大奇葩用户反馈!
  3. 机器运算知识点计算机组成原理,计算机组成原理考研知识点非常全
  4. 流媒体服务器 客户端播放器方案推荐
  5. 125KHz 100cm ID 读卡电路_7 个别出心裁的树莓派优质项目集锦(完整代码+电路设计资料)...
  6. 再读《精通css》04:盒模型和空白边叠加
  7. objc@interface的设计哲学与设计技巧
  8. prototype.js ajax.request,prototype.js的Ajax对象分享
  9. GOF设计模式之桥接模式
  10. 一步步实现SDDC-Edge负载均衡
  11. 创建ServerSocket出错Permission denied
  12. [Math] 二阶行列式和三阶行列式的几何意义的证明
  13. python练习题003:圆的面积
  14. Java - java代码实现ip归属地查询,调用百度ip地址查询,局域网也能查询到位置
  15. 概率统计Python计算:F分布分位点计算
  16. 实践一年之久,vivo 如何基于 APISIX 进行业务基础架构的演进
  17. 新浪微博java开发_新浪微博API java开发
  18. Painter not active
  19. 批处理bat文件连接SQL Server数据库并执行相关sql代码
  20. 常见深度学习模型集成方法

热门文章

  1. flash特效原理:标签云
  2. (四十四)Android O WiFi启动流程梳理
  3. 柳州市第一职业技术学校中心机房双活虚拟引擎容灾备份系统需求
  4. 蒲丰投针结果_只能用纸笔才能计算圆周率?蒲丰告诉你,投针游戏也可以
  5. android录制avi视频时aac音频的正确配置方法
  6. ffmpeg编码aac音频
  7. 人工智能时代给软件测试带来了哪些变化呢
  8. 差分应用(海底高铁)
  9. windows下局域网内通过NTP同步时间
  10. keytool工具使用