Description
Input
Output
Sample Input
1111111111
1101
Sample Output
1
3
4
6
7
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,b[10],st[55],c[55],d[55],tk,ans=1e9; char q[55]; bool dfs(int x,int p,int t){ if(p>ans||t>tk) return 0; if(x>n-m+1){ for(int i=x;i<=n;++i) t+=c[i]; if(p>ans||t>tk) return 0; for(int i=1;i<=p;++i) st[i]=d[i]; ans=p; return 1; }int tmp=0; for(int i=x;i<=x+m-1;++i) c[i]^=b[i-x+1]; d[p+1]=x; tmp|=dfs(x+1,p+1,t+c[x]); d[p+1]=0; for(int i=x;i<=x+m-1;++i) c[i]^=b[i-x+1]; tmp|=dfs(x+1,p,t+c[x]); return tmp; } int main(){ scanf("%d%d",&n,&m); scanf("%s",q+1); for(int i=1;i<=n;++i) c[i]=q[i]-48; scanf("%s",q+1); for(int i=1;i<=m;++i) b[i]=q[i]-48; for(tk=0;tk<=n;++tk)//从小到大枚举亮灯数 if(dfs(1,0,0)) break; printf("%d\n",ans); for(int i=1;i<=ans;++i) printf("%d\n",st[i]); return 0; }