fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <bits/stdc++.h>
  6. #define ll long long
  7. using namespace std;
  8. int main() {
  9. string str; cin>>str; ll arr[26];
  10. for (ll i =0; i<26; i++) {
  11. cin>>arr[i];
  12. }
  13. bool FullQM=1; char L,R; ll indexL,indexR;
  14. //Full Question Marks Check
  15. if (str[0]=='?') {
  16. for (int i =1; i<str.length(); i++) {
  17. if (str[i]=='?') continue;
  18. else {FullQM =0;}
  19. }
  20. if (FullQM) {
  21. for (int i =0; i<str.length(); i++) {
  22. str[i]=='a';
  23. }
  24. }
  25. //?????aaa
  26. else {
  27. for (int i =1; i<str.length(); i++) {
  28. if (str[i]=='?') {continue;}
  29. else {indexR=i; R = str[i]; break;}
  30. }
  31. for (int i = 'a'; i<='z'; i++) {
  32. if (arr[i-'a']==arr[R-'a']){
  33. for (int j = 0 ; j<indexR; j++) {
  34. str[j]=i;
  35. }
  36. break;
  37. }
  38. }
  39. }
  40. }
  41. //aa????????
  42. if (str[str.length()-1]=='?') {
  43. for (ll i = str.length()-1; i>0; i--) {
  44. if (str[i]=='?') {continue;}
  45. else{indexL = i; L = str[i]; break;}
  46. }
  47. for (ll i = 'a'; i<='z'; i++) {
  48. if (arr[i-'a']==arr[L-'a']) {
  49. for (int j = indexL+1; j<str.length(); j++) {
  50. str[j]=i;
  51. }
  52. break;
  53. }
  54. }
  55. }
  56. //aa??aa
  57. for (ll i =1; i<str.length()-1; i++) {
  58. if (str[i]=='?') {
  59. indexL=i-1; L=str[indexL];
  60. for (ll j = i; j<str.length()-1; j++){if (str[j]!='?') {R=str[j]; indexR=j; break;}}
  61. for (ll k = 'a'; k<'z'; k++) {
  62. if (arr[k-'a']==arr[R-'a'] || arr[k-'a']==arr[L-'a']) {
  63. for (ll m = indexL+1; m<indexR; m++) {
  64. str[m]=k;
  65. }
  66. break;
  67. }
  68. }
  69. i=indexR-1;
  70. }
  71. }
  72. ll Stringval=0;
  73. for (ll i =0; i<str.length()-1; i++) {
  74. Stringval += abs(arr[str[i]-'a']-arr[str[i+1]-'a']);
  75. }
  76. cout<<Stringval<<'\n';
  77. cout<<str;
  78. }
  79.  
Success #stdin #stdout 0.01s 5276KB
stdin
abc??def?gh
4 9 5 9 6 1 0 3 7 2 5 9 6 1 3 2 3 2 9 1 1 0 1 8 8 4
stdout
25
abcbbdeffgh