首页 > 其他分享 >[ARC096E] Everything on It

[ARC096E] Everything on It

时间:2024-01-26 21:55:06浏览次数:27  
标签:Qpow int ll Everything ARC096E ans FL mod

这种题在想题的时候可以先随便找到一个做法再去优化,不要管复杂度,想多了容易混。

首先容易发现,这道题直接计数比较困难。所以我们想到了用容斥来解决这个问题。

但是容斥的方式可能比较多,可以多尝试然后选择最简便的方法。钦定 \(f_i\) 表示,我们强制 \(n\) 个数中的 \(i\) 个出现次数不超过 \(1\) 的数。那么答案即为下式:

\[\sum_{i=0}^n (-1)^i\binom{n}{i}f_i \]

现在的问题就是怎么求 \(f_i\)。我们先算这 \(i\) 个数的方案数,考虑强制其中一些数恰好出现一次,且枚举一个 \(j\) 表示我们要把强制选的数分进这 \(j\) 个组(剩下不强制的数可以分进某一组也可以不选),那么方案数易得:\(i+1\brace j+1\)。因为我们可以把那些不选的单独看成一个组,然后为了防止这个组别里没有人而出现少算,我们另外钦定一个 \(i+1\) 号节点来代表这个组。

最终的 \(f_i\) 还要算上剩下 \(n-i\) 个数的方案数。剩下的数可以组成的集合数为 \(2^{n-i}\),方案数为 \(2^{2^{n-i}}\)(对于每个集合都有选与不选两种情况)。此外,剩下的数还可以放入原来的集合,故而方案数为 \((2^{n-i})^j\)。

时间复杂度 \(O(n^2)\),可以通过。

点击查看代码
#include <bits/stdc++.h>
#define FL(i, a, b) for(int i = (a); i <= (b); ++i)
#define FR(i, a, b) for(int i = (a); i >= (b); --i)
using namespace std;
typedef long long ll;
constexpr int N = 3e3 + 10;
int n, mod, ans, C[N][N], S[N][N];
int Qpow(int a, int b, int P = mod){
	int ans = 1;
	while(b){
		if(b & 1) ans = (ll)ans * a % P;
		a = (ll)a * a % P, b >>= 1;
	}
	return ans;
}
int Inv(int x){
	return Qpow(x, mod - 2);
}
void Init(){
	FL(i, 1, n + 1){
		S[i][1] = 1;
		FL(j, 2, i){
			S[i][j] = (S[i - 1][j - 1] + (ll)j * S[i - 1][j]) % mod;
		}
	}
	FL(i, 0, n){
		C[i][0] = 1;
		FL(j, 1, i){
			C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
		}
	}
}
void Calc(){
	FL(i, 0, n){
		int c = (i & 1? mod - 1ll : 1ll) * C[n][i] % mod;
		c = (ll)c * Qpow(2, Qpow(2, n - i, mod - 1)) % mod;
		FL(j, 0, i){
			ans = (ans + (ll)c * S[i + 1][j + 1] % mod * Qpow(2, (ll)(n - i) * j % (mod - 1))) % mod;
		}
	}
}
int main(){
	scanf("%d%d", &n, &mod);
	Init(), Calc();
	printf("%d\n", ans);
	return 0;
}

标签:Qpow,int,ll,Everything,ARC096E,ans,FL,mod
From: https://www.cnblogs.com/zac2010/p/17990820

相关文章

  • 用RWEverything刷内存spd
    最近参与的一个项目,由于主板只支撑ddr3L的内存,需要把ddr3标压内存刷为ddr3L。通过百度找到如下:不无折腾篇五:DDR3标压内存改DDR3L低压条保姆级傻瓜教程于是动手实践了一下,特此记录本过程:1、找台支持ddr3标压的机子作为刷机平台,并下载好软件RWEverything1.72、寻找能刷spd的内......
  • 实战攻防演练-利用Everything搜索软件进行内网后渗透利用
    前言Everything是一款很出名的文件搜索工具,基于文件、文件夹名称的快速搜索的轻量级的软件,而早在几年前就有很多apt组织利用everything来进行文件查找等,前几年在T00ls上也有人发过相关的文章,渗透测试技巧|Everything的利用,事实上在实战中用到的地方还是很多,而且他还是个白进程,支......
  • 254_搜索利器Everything的“不务正业”之旅
    这是一篇原发布于2020-01-2615:27:00得益小站的文章,备份在此处。前言Windows平台上秒级搜索软件Everything,相信有非常的多的朋友都使用过,它能够基于文件名快速定文件和文件夹位置,非常适合像轶哥这种把文件随处乱丢的用户。但Everything还有另外几个非常好用的功能:批量重命名......
  • win everything toolbar设置
    everythingtoolbar设置安装好toolbar后需要设置后才能在工具栏显示,且有一些个性化设置。工具栏显示toolbar工具栏->右键->工具栏->everythingtoolbar隐藏无效搜索设置详细显示......
  • Unity业务抽象套路二、EIP Everythings Is Prefab
     为什一些控制、数据管理的逻辑也要做成Prefab?好处:可以在Inspector中调整参数(而不是散落在各个配置文件中)调试时能够在Inspector确认具体数值自然地支持一系列方法:携程、定时、Update、FixedUpDate注意:有人习惯将配置写成ScriptableObject然后统一以此来管理。个人建......
  • Everything-高效快捷的本地搜索工具
    Everything是由voidtools开发的一款文件搜索工具,这款软件是基于名称实时定位文件和目录。Everything功能强大,体积小巧,第一次安装使用时会建立一个索引数据库,将所有文件和文件夹的名称导入其中,后续使用能够以极快的速度快速搜索,查找到你所需要的文件。Everything软件特点软件小巧,......
  • [ARC096E] Everything on It 题解
    题意对于集合\({1,2,\cdots,n}\),求它的子集族中,有多少个满足:任意两个子集互不相同;\(1,2,\cdots,n\)都在其中至少出现了\(2\)次。\(n\le3000\),答案对\(M\)取模。题解第一个限制形同虚设,下面着重考虑第二个限制。考虑到第二个限制集合的每个元素都是等价的,考虑二项......
  • win10 用 everything 搜索磁盘上所有软链接,硬链接文件
    方法一:Toviewreparsetargets(filesandfolders)andhardlinktargets(files):InEverything1.5,rightclicktheresultlistcolumnheaderandclickAddcolumns....Searchfor:reparseSelectReparseTargetandclickOK.rightclicktheresultlistcolu......
  • 同一网段下ping不通电脑以及everything的http服务器使用
    U盘沾水暂时不能用,想用机器A上的everything的http服务器拉点文件到另外的机器B上。但不能访问到那台电脑A,第一想法是ping一下那台电脑是否能通,结果ping也ping不通,显示超时。上网搜了一下是网络属性那里不能被其他电脑发现,具体的解决方案是控制面板\网络和Inte......
  • everything的高级用法
     更多·语法见下图 ......