首页 > 其他分享 >p3773-solution

p3773-solution

时间:2024-03-01 09:15:04浏览次数:34  
标签:int solution pos p3773 ans binom bmod2 dp

P3773 Solution

link

\[\binom n m\bmod2=\binom{n\bmod2}{m\bmod2}\binom{n/2}{m/2}\bmod2 \]

我们要让 \(\binom n m\bmod2\) 不为 \(0\),也就是让右式的两项均不为 \(0\)。

考虑 \(\binom{n\bmod2}{m\bmod2}\):\(n\bmod2\) 和 \(m\bmod2\) 的取值要么是 \(0\) 要么是 \(1\),所以只有当 \(n\bmod2=0,m\bmod2=1\) 时这个式子为 \(0\)。

考虑 \(\binom{n/2}{m/2}\):这相当于把 \(n,m\) 做了二进制拆分,拆分后 \(n,m\) 每位对应,只要出现 \(\binom 0 1\),\(\binom n m\bmod2\) 的值就为 \(0\)。

这相当于把 \(n,m\) 当作两个集合来看,当且仅当 \(m\) 是 \(n\) 的子集时 \(\binom n m\bmod2\) 不为 \(0\)。即 \(n\ \text{bitand}\ m=m\)。

那么接下来就很简单了:由于每个数互不相同,设 \(pos_i\) 表示数 \(i\) 出现的位置,\(dp_i\) 表示从第 \(i\) 个数开始的答案。

我们倒过来枚举,枚举 \(a_i\) 的子集 \(j\),如果 \(pos_j>i\) 那么 \(dp_i\gets dp_i+dp_{pos_j}\)。

代码

using namespace std;
const int N = 233333 + 10;
const int inf = ~0u >> 2;
const int p = 1e9 + 7;
int n,a[N],pos[N],dp[N],ans;
int main()
{
	cin >> n;
	for(int i = 1;i <= n;i++)
		scanf("%d" , a + i),pos[ a[i] ] = i;
	for(int i = n;i;i--)
	{
		dp[i] = 1; // 初值为一,假设单个元素也算
		for(int j = a[i];j;j = a[i] & j - 1)
			if(pos[j] > i)
				dp[i] = ( dp[i] + dp[ pos[j] ] ) % p;
		ans = ( ans + dp[i] ) % p;
	}
	cout << (ans - n + p) % p << endl; // 去除单个元素的贡献
    return 0;
}

标签:int,solution,pos,p3773,ans,binom,bmod2,dp
From: https://www.cnblogs.com/iorit/p/18046104

相关文章

  • p3768-solution
    P3768Solutionlink\(\begin{aligned}\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)&=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^nijd[\gcd(i,j)=d]\\&=\sum_{d=1}^nd^3\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}ij[......
  • p3435-solution
    P3435Solutionlink画个图:显然四个黄色部分是相等的。也就是说,黄色部分是A的一个border。根据题目,周期的长度也就是Q的长度,也就是A的长度减去它的某个border的长度。现在要求这个最大,由于A的长度固定,要求的也就是A的最小border长度。根据KMP求出来的nxt......
  • p3426-solution
    P3426Solutionlink考虑dp。设\(dp_i\)表示至\(i\)的字符串的答案。KMP求出nxt数组,那么显然\(dp_i\)要么等于\(i\)要么等于\(dp_{nxt_i}\)。什么时候\(dp_i\)等于\(dp_{nxt_i}\)呢?这时这个字符串一定由一个与\(nxt_i\)有相同\(dp\)值的前缀再印上一个bo......
  • p3306-solution
    P3306Solutionlink\(x_{i+1}\equiva\timesx_i+b\pmodp\)\(x_{i+1}\equiva(ax_{i-1}+b)+b\pmodp\)\(x_{i+1}\equiva(a(ax_{i-2}+b)+b)+b\pmodp\)\(...\)\(\displaystylex_{i+1}\equiva^ix_1+b\sum\limits_{j=0}^{i-1}a^j\pmodp\)即......
  • p3214-solution
    P3214Solutionlink为了方便,我们求有序的答案最后再除掉\(m!\)。题目的限制包括:每种元素总共出现偶数次不存在相同的两个集合没有空集考虑偶数的限制,你发现每个集合中元素出现次数要么\(0\)要么\(1\)。于是如果你确定了前\(m-1\)个集合,最后一个集合会被唯一......
  • p2791-solution
    P2791Solutionlink给你\(N,M,S,L\),\(S\)组询问,每次给出\(n,m,k\),表示有\(m\)个\(1\)和\(n-m\)个\(0\),求随机选出\(k\)个数的和的\(L\)次幂的期望,模数\(998244353\)。\(S\le200,L\le2\times10^5,M\leN\le2\times10^7\),每次询问的\(n,m,k\)满足\(m,k\len......
  • p2150-solution
    P2150Solutionlink首先两人选的数两两互质相当于两人的质因数集合无交。先考虑\(n\le30\):由于\(30\)内的质因只有\(10\)个,我们考虑状压\(dp\)。设\(dp_{i,S1,S2}\)表示考虑到第\(i\)个数,G选了质因数集合\(S1\),W选了质因数集合\(S2\)的方案数。刷表转移:\[d......
  • p1587-solution
    P1587Solutionlink给你\(n,m,k\),求满足\(1\lex\len,1\ley\lem\)且最简分数\(\dfracxy\)是\(k\)进制下纯循环小数的二元组\((x,y)\)个数。考虑纯循环小数的性质:我们知道纯循环小数的小数部分去除一个循环节后与原数的循环节相等,也就是\[\fracxy-\left\lfloor......
  • 2.29闲话 & solution 『任无数/花开花落之后/你仍君临芸芸众生』
    明天就省选了,我咋啥也不会最破防的一集一道LCT调了一下午没调出来最后发现是min和max取反了改完之后发现自己的访问有问题,如果有0边权我就会直接返回LLONG_MAX啊哈哈,我调了一下午,发了7个帖子然后校内OJ过了,POJ因为只有C++98所以CE了哈哈哈写个简要题解吧[......
  • P10202 [湖北省选模拟 2024] 沉玉谷 Solution
    好像比题解劣一个\(n\),但是也跑的很快。首先说明,问题等价于计算有多少种本质不同的方案使得整个序列被删完,证明省略。考虑用区间的方式表述这些操作,具体的,忽略删除后的移位操作,将每次删除的左右段点视为一个区间,则一定会有:区间的并是\([1,n]\)。区间之间要么不交,要么包含。......