fork download
  1. #include<stdio.h>
  2. int base;
  3. char f;
  4. int a[10];
  5. int b[10][10];
  6. int c[10];
  7. int res;
  8. void process(){
  9. int me=a[f-'1'];
  10. for(int i=0;i<9;i++){
  11. for(int j=0;j<9;j++){
  12. int dist=a[i]-a[j];
  13. if(dist<0)dist=-dist;
  14. me+=b[i][j]*dist;
  15. }
  16. }
  17. if(res<0||res>me)res=me;
  18. }
  19. void dfs(int dep){
  20. if(dep==9){
  21. process();
  22. return;
  23. }
  24. for(int i=0;i<9;i++){
  25. if(!c[i])
  26. {
  27. c[i]=1;
  28. a[dep]=i;
  29. dfs(dep+1);
  30. c[i]=0;
  31. }
  32. }
  33. }
  34. int main(){
  35. res=-1;
  36. char c='0';
  37. while(1){
  38. char d=getchar();
  39. if(d<0)break;
  40. if(d<'1'||d>'9')continue;
  41. if(c=='0'){
  42. f=d;
  43. }
  44. else{
  45. b[c-'1'][d-'1']++;
  46. }
  47. base++;
  48. c=d;
  49. }
  50. dfs(0);
  51. printf("%d",res+base);
  52. }
Success #stdin #stdout 0.07s 5320KB
stdin
78432579
stdout
20