PKU 2498 StuPId

http://poj.org/problem?id=2498
チェックサムから数字を復元するという問題。

後ろから数字を割り当てるというのを読み落としてサンプルが一つだけあわなくて戸惑った。

int fact[]={9,3,7};

main(){
  int T;
  cin>>T;
  rep(sc,T){
    printf("Scenario #%d:\n",sc+1);
    string in;
    cin>>in;
    reverse(ALL(in));
    int idx=0;
    int sum=0;
    rep(i,SZ(in)){
      if(in[i]=='?')idx=i;
      else sum+=(in[i]-'0')*fact[i%3];
    }
    for(int i=0;i<10;i++){
      if((i*fact[idx%3]+sum)%10==0){
        in[idx]=i+'0';
        break;
      }
    }
    reverse(ALL(in));
    cout<<in<<endl<<endl;
  }
}