容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对

文章目录

  • Co-prime
    • source
    • solution
    • code
  • Character Encoding
    • source
    • solution
    • code
  • Tree and Constraints
    • source
    • solution
    • code
  • 「2017 山东一轮集训 Day7」逆序对
    • source
    • solution
    • code

Co-prime

source

TTT组数据,给出𝐿,𝑅,𝑁𝐿, 𝑅, 𝑁L,R,N,求在区间[𝐿,𝑅][𝐿, 𝑅][L,R]中有多少个整数与𝑁𝑁N互质

solution

与SCOI2010幸运数字几乎一样的解决思路,甚至是弱化版

NNN最多含有111111个质因子

容斥原理

至少含000NNN的质因子的个数−-至少含111NNN​的质因子的个数+++至少含222NNN​的质因子的个数.........

完全可以dfs搜索是哪些质因子,也就2112^{11}211

code

#include <cstdio>
#define int long long
int ans, m, l, r;
int prime[20];void divide( int n ) {for( int i = 2;i * i <= n;i ++ )if( n % i == 0 ) {prime[++ m] = i;while( n % i == 0 ) n /= i;}if( n > 1 ) prime[++ m] = n;
}int calc( int x ) {int L = l / x + ( l % x != 0 ), R = r / x;return R - L + 1;
}void dfs( int p, int cnt, int sum ) {if( p > m ) {if( cnt & 1 ) ans -= calc( sum );else ans += calc( sum );return;}dfs( p + 1, cnt, sum );dfs( p + 1, cnt + 1, sum * prime[p] );
}signed main() {int T, n;scanf( "%lld", &T );for( int Case = 1;Case <= T;Case ++ ) {scanf( "%lld %lld %lld", &l, &r, &n );ans = m = 0;divide( n );dfs( 1, 0, 1 );printf( "Case #%lld: %lld\n", Case, ans );}return 0;
}

Character Encoding

source

TTT组数据

𝑚𝑚m个数,每个数的取值范围都是[0,𝑛−1][0, 𝑛−1][0,n1]​的整数。

求有多少种给这𝑚𝑚m​个数赋值的方案,使得他们的和为𝑘𝑘k

方案数可能很大,请对998244353998244353998244353取模

solution

隔板法

把和为kkk,拆分成kkk111的盒子,通过m−1m-1m1块隔板分割成为mmm个数字

但是隔板法不能有000的情况

就强制每个数字自带111,也将取值范围+1+1+1变成[1,n][1,n][1,n],那么最后的和也对应变成k+mk+mk+m

根据隔板法可以得到在无限制的情况下方案数为(m+k−1m−1)\binom{m+k-1}{m-1}(m1m+k1)

容斥原理,强制iii个划分区域>n>n>n,隔板个数减少i∗ni*nin

相当于已经有nnn个小球放到某个盒子内,然后把剩下小球放进mmm个盒子里面

code

#include <cstdio>
#define mod 998244353
#define int long long
#define maxn 200005
int T, n, m, k;
int fac[maxn], inv[maxn];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}void init( int N ) {fac[0] = inv[0] = 1;for( int i = 1;i <= N;i ++ )fac[i] = fac[i - 1] * i % mod;inv[N] = qkpow( fac[N], mod - 2 );for( int i = N - 1;i;i -- )inv[i] = inv[i + 1] * ( i + 1 ) % mod;
}int C( int n, int m ) {if( n < 0 || m < 0 || n < m ) return 0;else return fac[n] * inv[m] % mod * inv[n - m] % mod;
}signed main() {init( 2e5 );scanf( "%lld", &T );while( T -- ) {scanf( "%lld %lld %lld", &n, &m, &k );int ans = C( m + k - 1, m - 1 );for( int i = 1;i <= m;i ++ )if( i & 1 ) ans = ( ans - C( m, i ) * C( m + k - i * n - 1, m - 1 ) % mod ) % mod;else ans = ( ans + C( m, i ) * C( m + k - i * n - 1, m - 1 ) % mod ) % mod;printf( "%lld\n", ( ans + mod ) % mod );}return 0;
}

Tree and Constraints

source

给定一个含有𝑛𝑛n个节点的树,每一条边可以染成黑色或者白色

𝑚𝑚m​​个限制条件,每一个限制条件包括两个节点(𝑢,𝑣)(𝑢, 𝑣)(u,v)​,限制为𝑢,𝑣𝑢, 𝑣u,v两个节点之间的路径中必须包含至少一个涂成黑色的边

问有多少种染色方法使得这mmm个条件同时满足

solution

容斥原理

iii个限制满足不了,那么这iii个限制的路径的交都是白边,剩下的边无所谓

n≤50n\le 50n50,用long long压二进制路径

求个路径的交

code

#include <cstdio>
#include <algorithm>
using namespace std;
#define int long long
#define maxn 55
vector < int > G[maxn];
int path[maxn], limit[maxn];void dfs( int u, int fa, int s ) {path[u] = s;for( auto v : G[u] ) {if( v == fa ) continue;else dfs( v, u, 1ll << v | s );}	
}signed main() {int n, m;scanf( "%lld", &n );for( int i = 1, u, v;i < n;i ++ ) {scanf( "%lld %lld", &u, &v );G[u].push_back( v );G[v].push_back( u );}dfs( 1, 0, 0 );scanf( "%lld", &m );for( int i = 0, u, v;i < m;i ++ ) {scanf( "%lld %lld", &u, &v );limit[i] = path[u] ^ path[v];}int ans = 0;for( int i = 0;i < ( 1 << m );i ++ ) {int s = 0, cnt = 0;for( int j = 0;j < m;j ++ )if( 1 << j & i ) cnt ++, s |= limit[j];if( cnt & 1 ) ans -= 1ll << n - 1 - __builtin_popcountll( s );elseans += 1ll << n - 1 - __builtin_popcountll( s );}printf( "%lld\n", ans );return 0;
}

「2017 山东一轮集训 Day7」逆序对

source

给出𝑛,𝑘𝑛, 𝑘n,k,求有多少个𝑛𝑛n的全排列满足其逆序对数等于𝑘𝑘k

答案可能很大,请对998244353998244353998244353​取模

solution

按从小到大的顺序加入的话,iii​进去可能会造成xi∈[0,i−1]x_i\in[0,i-1]xi[0,i1]​的贡献

相当于求∑i=1nxi=k\sum_{i=1}^nx_i=ki=1nxi=k的多元方程组解个数

类似于第二题,只不过每个数的限制不太一样

容斥原理

无限制情况下(k+n−1n−1)\binom{k+n-1}{n-1}(n1k+n1)

钦定一些xi≥ix_i\ge ixii

设限制的xi≥ix_i\ge ixiiiii之和为sss

隔板法,方案数(k−s+n−1n−1)\binom{k-s+n-1}{n-1}(n1ks+n1)

容斥系数,限制的个数(−1)m(-1)^m(1)m

s>ks>ks>k时对答案无贡献,只需要计算[1,n][1,n][1,n]中选若干个数,和为s,s∈[1,k]s,s\in[1,k]s,s[1,k]​​的个数

巧妙的构造方案:

  • 每一次给一段数都+1+1+1,或者都+1+1+1后再放一个111,排除掉出现n+1n+1n+1的情况

    这样的构造可以构造出numi∈[1,n]num_i\in[1,n]numi[1,n]​的所有子集

fi,j:f_{i,j}:fi,j:iii个数和为jjj的方案数

  • iii个数全+1+1+1

    +fi,j−i+f_{i,j-i}+fi,ji

  • i−1i-1i1个数+1+1+1,新增一个111

    +fi−1,j−i+f_{i-1,j-i}+fi1,ji

  • 可能出现加111超过nnn的可能,强制前i−1i-1i1个中有一个超成n+1n+1n+1

    −fi−1,j−(n+1)-f_{i-1,j-(n+1)}fi1,j(n+1)

code

#include <cmath>
#include <cstdio>
#define int long long
#define mod 1000000007
#define maxn 100005
int f[500][maxn];
int fac[maxn << 1], inv[maxn << 1];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}void init( int n ) {fac[0] = inv[0] = 1;for( int i = 1;i <= n;i ++ )fac[i] = fac[i - 1] * i % mod;inv[n] = qkpow( fac[n], mod - 2 );for( int i = n - 1;i;i -- )inv[i] = inv[i + 1] * ( i + 1 ) % mod;
}int C( int n, int m ) {if( n < 0 || m < 0 || n < m ) return 0;else return fac[n] * inv[m] % mod * inv[n - m] % mod;
}signed main() {int n, k;scanf( "%lld %lld", &n, &k );init( n + k );f[0][0] = 1;int lim = sqrt( k << 1 );for( int i = 1;i <= lim;i ++ )for( int j = i;j <= k;j ++ ) {f[i][j] = ( f[i][j - i] + f[i - 1][j - i] ) % mod;if( j <= n ) continue;else f[i][j] = ( f[i][j] - f[i - 1][j - n - 1] + mod ) % mod;}int ans = C( n + k - 1, n - 1 );for( int i = 1;i <= lim && i <= n;i ++ )for( int j = 1;j <= k;j ++ )if( i & 1 ) ans = ( ans - C( n + k - j - 1, n - 1 ) * f[i][j] % mod ) % mod;elseans = ( ans + C( n + k - j - 1, n - 1 ) * f[i][j] % mod ) % mod;printf( "%lld\n", ( ans + mod ) % mod );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手工修复Azure DevOps无法连接到Azure的问题

点击上方蓝字关注“汪宇杰博客”今天我在为一个从TFVC迁移到Git的老项目重新配置发布到Azure App Service的CI/CD管线的时候&#xff0c;Azure DevOps竟然爆了。这是一个微软已知的bug&#xff0c;目前还未修复&#xff0c;我来带大家看看如何手工workaround这个问题。首先&…

Loj#576-「LibreOJ NOI Round #2」签到游戏【线段树】

正题 题目链接:https://loj.ac/p/576 题目大意 给出一个长度为nnn的序列aaa&#xff0c;还有一个未知序列bbb&#xff0c;你每次可以花费gcd⁡ilrai\gcd_{il}^r a_igcdilr​ai​的代价得到∑ilrbi\sum_{il}^rb_i∑ilr​bi​的值。 每次修改aaa中的一个数&#xff0c;求得到b…

NC14732 锁

NC14732 锁 题意&#xff1a; n个居民&#xff0c;门上有k把锁&#xff0c;每个居民有若干钥匙&#xff0c;为1到k的一个子集&#xff0c;如果几名居民的钥匙的并集是1到k&#xff0c;即他们拥有全部锁的对应钥匙。 求最小的k&#xff0c;使得可以适当地给居民们每人若干钥匙…

CodeForces:1103(div1)1104(div2)

文章目录前言CF1104A Splitting into digitsDescription\text{Description}DescriptionSolution\text{Solution}SolutionDescription\text{Description}DescriptionCF1104B Game with stringDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text…

专题突破一之分块——Untitled Problem II,Balanced Lineup,[ioi2009]Regions

文章目录SP2940 UNTITLE1 - Untitled Problem IIsourcesolutioncodeBalanced LineupsourcecodeCount on a tree II[ioi2009]RegionsSP2940 UNTITLE1 - Untitled Problem II source solution 分块 si{sik(i−l1)sikik(1−l)l≤i≤rsik(r−l1)r<is_i\begin{cases} s_ik\tim…

.NET Core实战项目之CMS 第十七章 CMS网站系统的部署

目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了&#xff0c;通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了&#xff01;当然这个CMS系统的一些逻辑处理还需要优化&#xff0c;如没有引入日志组件以及缓存功能&#xff0c;权限目前只支持控制到菜单&…

ICPC2019南昌区域赛

ICPC2019南昌区域赛 题号题目知识点难度A9102BA Funny Bipartite Graph状压dp思维稳银快金CAnd and Pair二项式定理快铜DBitwise TreeEBob’s Problem思维&#xff0c;生成树签到FDynamic Suffix ArrayGEating Plan思维题稳铜快银HPowers of TwoIResistanceJSummonKTreeLWho i…

Loj#510-「LibreOJ NOI Round #1」北校门外的回忆【线段树】

正题 题目链接:https://loj.ac/p/510 题目大意 给出一个代码 function add(x,v)while x < n dos[x] s[x] xor vx x lowbit(x) //注意&#xff0c;这里是 lowbit&#xff0c;这也是两份代码唯一的区别end while end functionfunction query(x)ans 0while x > 0 doa…

如何用EFCore Lazy Loading实现Entity Split

α角 与 β角支持 现实生活 的 计算机系统&#xff0c;总有着两大偏差&#xff0c;第一个是 现实生活 与 计算机系统 的α角&#xff0c;另外一个是计算机系统的 逻辑设计 与 物理设计 的β角。举个栗子&#xff1a;α角&#xff1a;假设某个公司的商业流程&#xff0c;我们在做…

CodeForces:372(div1)div373(div2)

文章目录前言CF373A Collecting Beats is FunDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF373B Making Sequences is FunDescription\text{Description}DescriptionSolution\text{Solution}SolutionCF372A Counting Kangaro…

一二三系列之CodeChef分块——Chef and Churu,Chef and Problems,Children Trips

文章目录Chef and ChurusourcesolutioncodeChef and ProblemssourcesolutioncodeChildren TripssourcesolutioncodeChef and Churu source solution 对于单独的iii&#xff0c;查询可以用线段树/树状数组O(nlog⁡n)O(n\log n)O(nlogn)&#xff0c;这暗示可以平衡查询修改次数…

Bob‘s Problem

Bob’s Problem 题意&#xff1a; 一个有n个点的图&#xff0c;其中边分为白色和黑色&#xff0c;每个边都有边权&#xff0c;所选白边的数量的数量不能超过k&#xff0c;问现在选择一些边&#xff0c;使得所有点连通&#xff0c;问最大权值是多少&#xff1f; 题解&#xf…

.NET Core 开源项目 Anet 在路上

今天给大家介绍我刚开源的一个 .NET Core 项目&#xff1a;Anet。Anet 的目标是实现一个 .NET Core 通用库、通用框架和通用模板。我给它的定义是&#xff1a;A .NET Core Common Lib, Framework and Boilerplate.它的取名正是来自于这句话的前面四个字母&#xff1a;ANET。Ane…

Loj#2324-「清华集训 2017」小 Y 和二叉树

正题 题目链接:https://loj.ac/p/2324 题目大意 给出nnn个点的一棵树&#xff0c;每个点的度数不超过333。 你要求它的一个二叉树结构&#xff08;根任意选择&#xff09;使得其中序遍历的字典序最小。 1≤n≤1061\leq n\leq 10^61≤n≤106 解题思路 直接找根感觉比较麻烦&…

模板:后缀自动机(SAM)

所谓后缀自动机&#xff0c;就是通过后缀建立的自动机 &#xff08;逃&#xff09; 请允许我先介绍一下后缀家族&#xff1a; &#xff08;又逃&#xff09; 前言 OI生涯目前为止学习的最为难以理解的算法&#xff0c;没有之一。 到现在也没有完全的理解。 qwq 概念 定义&…

.NET 开源项目 Anet 介绍

使用 Anet 有一段时间了&#xff0c;已经在我的个人网站&#xff08;如 bookist.cc&#xff09;投入使用&#xff0c;目前没有发现什么大问题&#xff0c;所以才敢写篇文章向大家介绍。GitHub 地址&#xff1a;https://github.com/anet-team/anetAnet 是一个 .NET Core 通用框架…

线性代数问卷调查反馈——Find The Determinant III,Takahashi‘s Basics in Education and Learning

文章目录Find The Determinant IIIsourcecodeTakahashis Basics in Education and LearningsourcecodeFind The Determinant III source 高斯消元求行列式的模板题 code #include <cstdio> #include <iostream> using namespace std; #define maxn 205 #define…

L - Who is the Champion

L - Who is the Champion 计蒜客 - 42587 题意&#xff1a; 给出一个N阶矩阵&#xff0c;&#xff08; i , j &#xff09; &#xff08;i, j&#xff09;&#xff08;i,j&#xff09;处的数字表示这场比赛球队i ii踢进球队j jj多少球。两支球队平局则各加一分&#xff0c;一…

CF1037H Security(SAM)

解析 算是一个比较高级的SAM的应用了 对fail树的dfs序建立维护右端点最大值的线段树 考虑把所有的询问离线&#xff0c;按照右端点排序 每次动态把当前询问右端点左侧的前缀插入线段树 处理询问时&#xff0c;先贪心的尝试和询问串填法一样&#xff0c;如果不行就往下一个字母…

AT5147-[AGC036D]Negative Cycle【dp,模型转换】

正题 题目链接:https://www.luogu.com.cn/problem/AT5147 题目大意 有nnn个点的一张图&#xff0c;其中i→i1(i<n)i\rightarrow i1(i< n)i→i1(i<n)有一条边权值为000。 对于其他i,j(i≠j)i,j(i\neq j)i,j(ij)存在一条边i→ji\rightarrow ji→j&#xff0c;若i&l…