Advertisement
jeff69

Untitled

Jan 9th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define sc(a) scanf("%d",&a)
  5. #define scll(a) scanf("%I64d",&a)
  6. #define scs(a) scanf(" %s",a)
  7. #define scc(a) scanf(" %c",&a)
  8.  
  9. const int MAX = 1e5+6;
  10. const int INF = 2e9+5;
  11. const long long MOD = 1e9+7;
  12.  
  13. long long power (long long a ,long long e ,long long mod)
  14. {
  15. if (e == 0)
  16. return 1ll;
  17. if (e == 1)
  18. return a % mod;
  19. if (e & 1)
  20. return ((a%mod) * power(a,e-1,mod))%mod;
  21. else
  22. {
  23. long long tmp = power(a,e/2,mod);
  24. return (tmp*tmp)%mod;
  25. }
  26. }
  27.  
  28. long long gcd(long long x,long long y)
  29. {
  30. return __gcd(x,y);
  31. }
  32.  
  33. long long lcm(long long x,long long y)
  34. {
  35. return (x*y)/gcd(x,y);
  36. }
  37.  
  38. char in[10005];
  39. int len,n;
  40. long long dp[10005][1020];
  41.  
  42. long long solve(int id = 0,int code = 0)
  43. {
  44. if(id == len)
  45. return code == n;
  46.  
  47. long long &ret = dp[id][code];
  48. if(ret != -1)
  49. return ret;
  50. ret = 0;
  51. if(in[id] == '?')
  52. {
  53. for(int i=0;i<26;++i)
  54. ret += solve(id+1,(code * 31 + ('a'+i)) % 1013);
  55. }
  56. else
  57. {
  58. int tmp = code;
  59. int i;
  60. for(i=id;i<len;++i)
  61. if(in[i] != '?')
  62. tmp = (tmp * 31 + in[i]) % 1013;
  63. else
  64. break;
  65. if(i == len-1 && in[i] != '?')
  66. ++i;
  67. ret += solve(i,tmp);
  68. }
  69.  
  70. return ret;
  71. }
  72.  
  73. void print(int id = 0,int code = 0)
  74. {
  75. if(id == len)
  76. return;
  77.  
  78. long long ret = solve(id,code);
  79.  
  80. if(in[id] == '?')
  81. {
  82. for(int i=0;i<26;++i)
  83. {
  84. if(solve(id+1,(code * 31 + ('a'+i)) % 1013) == ret)
  85. {
  86. putchar('a'+i);
  87. print(id+1,(code * 31 + ('a'+i)) % 1013);
  88. break;
  89. }
  90. }
  91. }
  92. else
  93. {
  94. int tmp = code;
  95. int i;
  96. for(i=id;i<len;++i)
  97. if(in[i] != '?')
  98. putchar(in[i]),tmp = (tmp * 31 + in[i]) % 1013;
  99. else
  100. break;
  101. if(i == len-1 && in[i] != '?')
  102. ++i;
  103. print(i,tmp);
  104. }
  105. }
  106.  
  107. int main()
  108. {
  109. int T;
  110. sc(T);
  111. for(int i=1;i<=T;++i)
  112. {
  113. sc(n);
  114. scs(in);
  115. len = strlen(in);
  116. memset(dp,-1,sizeof dp);
  117. printf("Case #%d: ",i);
  118. if(solve() != 1ll)
  119. printf("%lld\n",solve());
  120. else
  121. print(),puts("");
  122. }
  123.  
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement