Codeforces 1169E DP
题意:给你一个长度为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相关推荐
- c语言鸽巢原理,Codeforces 1188C DP 鸽巢原理
题意:定义一个序列的beauty值为序列中元素之差绝对值的最小值,现在给你一个数组,问所有长度为k的子序列的beauty值的和是多少? 思路:(官方题解)我们先解决这个问题的子问题:我们可以求出bea ...
- codeforces的dp专题
1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...
- CodeForces 567F DP Mausoleum
本着只贴代码不写分析的题解是在耍流氓的原则,还是决定写点分析. 思路很清晰,参考的官方题解,一下文字仅对题解做一个简要翻译. 题意: 有1~n这n个数,每个数用两次.构成一个长为2n的序列,而且要求序 ...
- G - Hard problem CodeForces - 706C DP
#include<bits/stdc++.h> using namespace std;typedef long long ll; string a[100000 +10], b[1000 ...
- Codeforces 1096F(dp + 树状数组)
题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...
- Codeforces 1105C (DP)
题面 传送门 分析 这种计数问题,要不是纯数学推公式,要不就是dp 先处理出[l,r]中除3余0,1,2的数的个数,记为cnt0,cnt1,cnt2 设\(dp[i][j]\)表示前i个数的和除3余j ...
- Codeforces 319C DP 斜率优化
题意:在一颗森林有n颗数,编号从1到n,第i棵树高度是a[i].有一个伐木工想要砍伐这片森林,它的电锯每次可以将树的高度减少1,然后就必须要充电,充电的代价是他已经砍倒的树种编号最大的那颗树的代价(b ...
- E. Pencils and Boxes codeforces(思维+dp)
题目链接:E. Pencils and Boxes 题意: 给出n个数字,分组,每组大小>=k,并且同一组内任意两个数字大小不能超过d 思路: 先从小到大排序.然后dp.起点肯定是第一个数字,然 ...
- Dynasty Puzzles CodeForces - 191A+DP二维
题意:一共给你N个字符串,如果一个字符串的尾部字母和一个字符串的首部字母相同,/那么两个字符串就可以拼接起来,问最长的首尾字母相同的字符串的长度为多少. //思路:DP便利一遍就够了 ,dp[a][b ...
最新文章
- go get 无法下载问题解决方案及下载 aliyun-oss-go-sdk incompatible.info
- 【神回复】看 App 运营高手如何应对六大奇葩用户反馈!
- 机器运算知识点计算机组成原理,计算机组成原理考研知识点非常全
- 流媒体服务器 客户端播放器方案推荐
- 125KHz 100cm ID 读卡电路_7 个别出心裁的树莓派优质项目集锦(完整代码+电路设计资料)...
- 再读《精通css》04:盒模型和空白边叠加
- objc@interface的设计哲学与设计技巧
- prototype.js ajax.request,prototype.js的Ajax对象分享
- GOF设计模式之桥接模式
- 一步步实现SDDC-Edge负载均衡
- 创建ServerSocket出错Permission denied
- [Math] 二阶行列式和三阶行列式的几何意义的证明
- python练习题003:圆的面积
- Java - java代码实现ip归属地查询,调用百度ip地址查询,局域网也能查询到位置
- 概率统计Python计算:F分布分位点计算
- 实践一年之久,vivo 如何基于 APISIX 进行业务基础架构的演进
- 新浪微博java开发_新浪微博API java开发
- Painter not active
- 批处理bat文件连接SQL Server数据库并执行相关sql代码
- 常见深度学习模型集成方法