题解:

显然只需要知道某几位上是111的有多少个就可以容斥了,这个用枚举子集可以做到O(3n)" role="presentation" style="position: relative;">O(3n)O(3n)O(3^n),但是不能AC。考虑一个错误的做法,对于某个状态SSS,它出现了cnt[S]" role="presentation" style="position: relative;">cnt[S]cnt[S]cnt[S]次,然后对于SSS去掉某一位上的1" role="presentation" style="position: relative;">111得到的S′S′S',cnt[S′]+=cnt[S]cnt[S′]+=cnt[S]cnt[S']+=cnt[S],但是这样显然是错的,比如A−>BA−>BA->B,A−>CA−>CA->C,B−>DB−>DB->D,C−>DC−>DC->D,其中箭头表示转移,那么相当于AAA转移了两次到D" role="presentation" style="position: relative;">DDD。如何解决这个问题呢?其实从低位到高位转移就可以。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pa pair<int,int>
const int Maxn=22;
const int Maxm=1000010;
const int inf=2147483647;
const int mod=1000000007;
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return x*f;
}
int Pow(int x,int y)
{if(!y)return 1;if(y==1)return x;int t=Pow(x,y>>1),re=(LL)t*t%mod;if(y&1)re=(LL)re*x%mod;return re;
}
bool mark[1<<Maxn];
int ans=0,n,m,k,a[Maxm],one[1<<Maxn],cnt[1<<Maxn];
int main()
{memset(cnt,0,sizeof(cnt));n=read(),m=read(),k=read();for(int i=1;i<=m;i++)cnt[a[i]=read()]++;one[0]=0;for(int i=1;i<(1<<n);i++)one[i]=one[i>>1]+(i&1);for(int i=0;i<n;i++)for(int j=1;j<(1<<n);j++)if((1<<i)&j)cnt[j-(1<<i)]+=cnt[j];for(int i=1;i<(1<<n);i++){if(one[i]&1)ans=(ans+Pow(cnt[i],k))%mod;else ans=(ans-Pow(cnt[i],k)+mod)%mod;}printf("%d",ans);
}

「LibreOJ Round #11」Misaka Network 与任务相关推荐

  1. 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)

    #572. 「LibreOJ Round #11」Misaka Network 与求和 推式子 ∑i=1n∑j=1nf(gcd(i,j))k∑d=1nf(d)k∑i=1nd∑j=1nd[gcd(i,j ...

  2. 「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)

    description 研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起. 现在妹妹们排成了 N行 M 列,有的位置没有人.现在研究 ...

  3. 「LibreOJ Round #11」Misaka Network 与测试【二分图最大匹配+读入坑点】

    题目链接 LOJ 569 这道题的坑点或许不在于想到这个算法,而是在于这里有读入的坑点,会使得你在本地编译正确而在题目判断的时候得到WA. 因为,题目的操作系统是win的,而我自己的编译器是Mac O ...

  4. Loj#572. 「LibreOJ Round #11」Misaka Network 与求和

    题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...

  5. [LOJ]#572. 「LibreOJ Round #11」Misaka Network 与求和 min_25筛+杜教筛

    Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...

  6. LOJ #570. 「LibreOJ Round #11」Misaka Network 与任务

    观察发现,肯定是1个或两个最优. #include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define ...

  7. LOJ 572 「LibreOJ Round #11」Misaka Network 与求和——min_25筛

    题目:https://loj.ac/problem/572 莫比乌斯反演得 \( ans=\sum\limits_{D=1}^{n}\left\lfloor\frac{n}{D}\right\rflo ...

  8. LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]

    传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...

  9. Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))

    直接反演一下:∑i=1n∑i=1nf(gcd(i,j))k\sum_{i = 1}^n\sum_{i = 1}^nf(gcd(i,j))^ki=1∑n​i=1∑n​f(gcd(i,j))k=∑d=1n ...

最新文章

  1. SCCM2012R2之五创建系统集合
  2. 面试题编程题06-python 输入一个字符串,反转输出
  3. Windows 性能问题诊断(5)
  4. vue中使用v-on绑定事件中,获取$event.currentTarget,日志打印为null
  5. sql 账号查询一个表查询权限_一个查询语句引发的问题以及巨型表相关操作探索与思考...
  6. 算法题存档20190206
  7. angular 注入器配置_注入器和发布库–AngularJS学习笔记(三)
  8. linux用户名和密码6,Linux系统中(CentOS 7)的用户和权限管理
  9. hive中的日期转换函数
  10. 随机生成指定个数学生的语文数学外语成绩并求平均值
  11. django部署到linux上不显示.svg图标处理方法
  12. Codeforces Round #535 (Div. 3) 解题报告
  13. DataTable.select()
  14. 调用阿里API创建阿里云主机
  15. 骑着单车追随你——西西里的美丽传说
  16. UNIAPP手写签名
  17. Ehcache基本使用
  18. 每日一分享C语言代码(The first day)
  19. weex更新方案探索(一)
  20. hr看php简历,HR:“有这样的简历,才值得一见!”

热门文章

  1. 微信发不出去消息了,几个情况??
  2. sysbench 1.0.6 mysql_sysbench mysql压测
  3. 《易流》电子商务平台经营模式和技术分析
  4. 2021年南通各高中高考成绩查询,2021南通所有高中排名一览表
  5. oracle srvctl命令,ORACLE RAC 数据库服务器上 srvctl 常用的一些操作命令
  6. java 系统托盘图标_Java SystemTray类(系统托盘)和TrayIcon类(托盘图标)
  7. 我爱学习网络 2022-12-25
  8. 计算机网络篇:网络层路由选择之汇集树产生
  9. HTML、CSS、JS实现的HTML、CSS、JS编辑器
  10. 计算机网络实训教程实训总结,计算机网络实训报告