2012年成都Onsite (A,B,I,J,K)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
A:水题
B:高中概率知识 ,整出个式子,sigma( k*C(n+k,k)* (p^(n+1)*q^k+q^(n+1)*p^k) )
然后就没有然后了,现场的时候是边乘边除乱搞过的,比较优越的是取个对数
int flag[10];int n,k;int vis[10005];void bfs(){ mem(vis,0); queue<pair<string,int> >que; que.push(mp("",0)); while(!que.empty()) { pair<string,int>u=que.front(); que.pop(); for(int i=0;i<10;i++) { if(i==0&&u.second==0) continue; if(flag[i]) continue; pair<string,int>v=u; v.first+=(char)(i+'0'); v.second=(v.second*10+i)%n; if(v.second == 0) {cout<<v.first<<endl;return ;} if(vis[v.second]==0) { vis[v.second]=1; que.push(v); } } } printf("-1\n");}int main(){ int cas=0; while(scanf("%d%d",&n,&k)!=EOF) { mem(flag,0); for(int i=0;i<k;i++) { int m; scanf("%d",&m); flag[m]=1; } printf("Case %d: ",++cas); if(k==0){printf("%d\n",n);continue;} bfs(); } return 0;}