传送门 简单dp. 根据题目的描述. 如果数列bn{b_n}bn合法. 那么有:bi−1b_{i-1}bi−1&bi!=0b_i!=0bi!=0,因此我们用f[i]f[i]f[i]表示数列b最后一位第i个二进制位为1的时候b数列的最长长度. 然后简单转移一下就行了. #include<bits/stdc++.h> #define N 100005 using namespace std; inline int read(){ int ans=0; char ch=getchar(…
题意: n<=100000,ai<=2*10^9 思路:按二进制逐位考虑,只要有至少1位取and后为1就可以接下去 设dp[i]为第i位取and之后为1的最长的序列长度,意会一下 #include<cstdio> #include<iostream> typedef long long ll; using namespace std; #define MOD 1000000007 #define N 110000 ]; int main() { int n; scanf…
All Your Paths are Different Lengths 题目链接:https://atcoder.jp/contests/arc102/tasks/arc102_b 题解: 构造题有技巧,如果题目中要求了20和60,那就从这里入手好了. 发现没法入手因为太平凡了.... 但是,他要求了每种值只出现了一次,容易联想到弄出来$log$个$2$的幂次. 诶?想到这里发现,$20$好像差不多就是$log$大小. 我们就放$20$个点,第$i$个点指向第$i + 1$个点两条边,$2^{…