题目大意:n个小于等于m的数,现在你需要在[1,m]中选择若干个数,使得选出的数能组成的所有数正好与n个数相同,给出最少要选多少个数。

题目分析:

结论一:选择的若干个数一定在n个数中。

证明:否则的话不满足“正好”。

结论二:若a,b在由n个数组成的集合中,则a+b(a+b<=m)也在由n个数组成的集合中。

证明:通过归纳法可以证明。

那么我们考虑构造生成函数G(x)=∑ki*xi,其中当由n组成的集合中有数i时ki=1,否则为0。接着将多出的数删除即可。

代码:

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const ll mod = ;
const int gg = ;
const int maxn = ;
int mp[maxn],a[maxn],f[maxn];
int n,m;
int ord[maxn]; int fast_pow(int now,int p){
if(p == ) return ;
if(p == ) return now;
int z = fast_pow(now,p/); z = (1ll*z*z)%mod;
if(p & ){z = (1ll*z*now)%mod;}
return z;
} void fft(int *d,int len,int kind){
for(int i=;i<len;i++) if(ord[i] > i) swap(d[i],d[ord[i]]);
for(int i=;i<len;i<<=){
int wn = fast_pow(gg,(mod-)/(i<<));
if(kind == -) wn = fast_pow(wn,mod-);
for(int j=;j<len;j += (i<<)){
int w = ;
for(int k=;k<i;k++,w=(1ll*w*wn)%mod){
ll x = d[j+k],y = (1ll*w*d[j+k+i])%mod;
d[j+k] = (x+y)%mod; d[j+k+i] = (x-y+mod)%mod;
}
}
}
if(kind == -){
int inv = fast_pow(len,mod-);
for(int i=;i<len;i++) d[i] = (1ll*d[i]*inv)%mod;
}
} void read(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),mp[a[i]] = f[a[i]] = ;
} void work(){
int bit = ,len = ;
while(len < m*) bit++,len<<=;
for(int i=;i<len;i++) ord[i] = (ord[i>>]>>) + ((i&)<<bit-);
fft(f,len,);
for(int i=;i<len;i++) f[i] = (1ll*f[i]*f[i])%mod;
fft(f,len,-);
int ans = ;
for(int i=;i<=m;i++){
if(f[i]&&mp[i]) {mp[i] = ;continue;}
if(f[i]){puts("NO");return;}
if(mp[i]) ans++;
}
puts("YES");
printf("%d\n",ans);
for(int i=;i<=m;i++) if(mp[i]) printf("%d ",i);
} int main(){
read();
work();
return ;
}

codeforces 286E Ladies' Shop的更多相关文章

  1. CodeForces 286E Ladies' Shop 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8781889.html 题目传送门 - CodeForces 286E 题意 首先,给你$n$个数(并告诉你$m$ ...

  2. Codeforces 286E - Ladies' Shop(FFT)

    Codeforces 题面传送门 & 洛谷题面传送门 好久没刷过 FFT/NTT 的题了,写篇题解罢( 首先考虑什么样的集合 \(T\) 符合条件.我们考察一个 \(x\in S\),根据题意 ...

  3. codeforces 286 E. Ladies' Shop (FFT)

    E. Ladies' Shop time limit per test 8 seconds memory limit per test 256 megabytes input standard inp ...

  4. codeforces#1154F. Shovels Shop (dp)

    题目链接: http://codeforces.com/contest/1154/problem/F 题意: 有$n$个物品,$m$条优惠 每个优惠的格式是,买$x_i$个物品,最便宜的$y_i$个物 ...

  5. Codeforces 1154F - Shovels Shop - [DP]

    题目链接:https://codeforces.com/contest/1154/problem/F 题解: 首先,可以确定的是: 1.$(x,y)$ 里 $x>k$ 的都不可能用: 2.肯定买 ...

  6. Codeforces 1154F Shovels Shop

    题目链接:http://codeforces.com/problemset/problem/1154/F 题目大意: 商店有n把铲子,欲购k把,现有m种优惠,每种优惠可使用多次,每种优惠(x, y)表 ...

  7. Codeforces 286E

    #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...

  8. [CF286E] Ladies' shop

    Description 给出 \(n\) 个 \(\leq m\) 且不同的数 \(a_1,\dots,a_n\),现在要求从这 \(n\) 个数中选出最少的数字,满足这 \(n\) 个数字都可以由选 ...

  9. Ladies' Shop

    题意: 有 $n$ 个包,设计最少的物品体积(可重集),使得 1. 对于任意一个总体积不超过给定 $m$ 的物体集合有其体积和 恰好等于一个包的容量. 2.对于每一个包,存在一个物品集合能恰好装满它. ...

随机推荐

  1. git命令 高级

    Git 分支 - 分支的删除 git删除本地分支 git branch -D br git删除远程分支 git push origin :br  (origin 后面有空格) clone服务器上的资源 ...

  2. PHP中单引号与双引号的区别

    在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" ". 一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析. PHP允许我们在双引号串中直接包含 ...

  3. 又是一个愚蠢的错误,皆因.xml而起

       论java中的.xml到底有多坑?! 感觉自己都快哭了,再一次被.xml给坑了一下,这次坑的太狠了,一下子导致自己浪费了昨天一下午,一晚上,今天一上午和半个下午呀,中间的过程真的是乏善可陈呀,各 ...

  4. Tesseract OCR win 32位编译

    https://github.com/tesseract-ocr/tesseract/wiki/Compiling 找到该标题:Develop Tesseract 按照上面的步骤执行即可,最后使用 v ...

  5. window 环境变量保存位置在哪里?

    注册表-regedit.exe 用户变量: HKEY_CURRENT_USER\Environment 系统变量: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe ...

  6. ACdream 1015 Double Kings 树的重心

    思路:删除根结点,其最大子树的节点最少.求一次树的重心即可. AC代码 #include <cstdio> #include <cmath> #include <ccty ...

  7. docker-compose 完整打包发布, 多服务,多节点SPRING CLOUD ,EUREKA 集群

    这里不再使用 端口映射的方式,因为不同主机上,Feign 根据 docker hostname访问会有问题. 把打包的好jar copy到docker镜像里 有几个服务,就复制几个dockerfile ...

  8. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解

    一直很想知道WeakHashMap的使用场景,想来想去只能用在高速缓存中,而且缓存的数据还不是特别重要,因为key(key不存在被引用的时候)随时会被回收 所以研究了一下WeakHashMap的回收时 ...

  9. 编译、裁剪、安装、删除 Ubuntu内核和模块管理

    一.下载最新内核文件 地址:http://www.kernel.org,一般下载Full Source版本. 下载完毕后,放到任意文件夹中,使用命令: tar jxvf linux-x.x.x.tar ...

  10. 第4章 PCIe总线概述

    随着现代处理器技术的发展,在互连领域中,使用高速差分总线替代并行总线是大势所趋.与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的 ...