题意:给你一个范围,让你找到满足条件的数有多少个。。条件:是7的倍数,%Xi=ai。。
思路:这个问题明显是个并集这样的问题。。纸上大概写一写就能发现是个容斥的问题。。所以我们先预处理出来每种情况模线性方程的解。。。之后用dfs+状压进行容斥原理(就是把表达式展开+-+-。。。)。。到这里这个题就做完了。。
代码:
#includeusing namespace std;int n;int vis[1<<16];long long dp[1<<16][2];long long M[16],A[16];long long extend_gcd(long long a,long long b,long long &x,long long &y){ if(a == 0 && b == 0)return -1; if(b ==0 ){ x = 1; y = 0; return a; } long long d = extend_gcd(b,a%b,y,x); y -= a/b*x; return d;}long long m[16],a[16];//模数为m,余数为a, X % m = abool solve(long long &m0,long long &a0,long long m,long long a){ long long y,x; /* * 无解返回false,有解返回true; * 解的形式最后为 a0 + m0 * t (0<=a0