传送门
跟这道题的想法基本一样吧。
只不过这道题是求出所有可能选出的数拿来做状压 d p dp dp求出总方案。
然后维护一下前后缀的 d p dp dp值,用 f m t fmt fmt合并 p r e i − 1 pre_{i-1} prei−1和 s u f i + 1 suf_{i+1} sufi+1来得到缺失第 i i i个可行值的方案数。
代码:
#include<bits/stdc++.h>
#include<tr1/unordered_map>
#define ri register int
using namespace std;
const int rlen=1<<18|1;
inline char gc(){
static char buf[rlen],*ib,*ob;
(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));
return ib==ob?-1:*ib++;
}
inline int read(){
int ans=0;
char ch=gc();
while(!isdigit(ch))ch=gc();
while(isdigit(ch))ans=((ans<<2)+ans<<1)