fork download
  1. #include<iostream>
  2. #include<cstring>
  3. #include<stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int part(char *a, int p, int r){
  8. char x;
  9. char temp1, temp2;
  10. x = a[r];
  11. int i = p -1;
  12. for(int j = p; j <= r - 1; j++ ){
  13. if(a[j] <= x){
  14. i = i+ 1;
  15. temp1 = a[i];
  16. a[i] = a[j];
  17. a[j] = temp1;
  18. }
  19. }
  20. temp2 = a[i + 1];
  21. a[i + 1] = a[r];
  22. a[r] = temp2;
  23. return (i + 1);
  24. }
  25.  
  26. void quick(char *a, int p, int r){
  27. int q;
  28. if(p < r){
  29. q = part(a, p, r);
  30. quick(a, p, q -1 );
  31. quick(a, q, r);
  32. }
  33. }
  34. int main()
  35. {
  36. int t;
  37. int count1, count2;
  38. int l, i, j, k,f;
  39. scanf("%d",&t);
  40. char a[10001];
  41. char b[5001];
  42. char c[5001];
  43. int d[5000];
  44. char temp, hold;
  45.  
  46.  
  47. while(t){
  48. f = 0;
  49. scanf("%s",a);
  50. l = strlen(a);
  51.  
  52. if(l % 2 != 0){
  53. cout<<"-1"<<endl;
  54. }
  55. else{
  56. for(i = 0; i < l/2; i++){
  57. b[i] = a[i];
  58. }
  59. b[i] = '\0';
  60. k = 0;
  61. for(i = l/ 2; i < l; i++){
  62. c[k] = a[i];
  63. k++;
  64. }
  65. c[k] = '\0';
  66.  
  67. quick(b, 0, l/2 - 1);
  68. quick(c, 0, l/2 - 1);
  69. hold = '\0';
  70. temp = '\0';
  71. for(k = 0; k < l/2;k++){
  72. d[k] = 0;
  73. }
  74. for(j = 0; j < l/2; j++){
  75. hold = temp;
  76. temp = b[j];
  77.  
  78. count1 = 0;
  79. count2 = 0;
  80.  
  81. for(i = 0; i < l/2; i++){
  82. if(temp != hold){
  83. if(temp < c[i]){
  84. break;
  85. }else if(temp == c[i] && c[i] != c[i + 1] && d[i] != 1){
  86. d[i] = 1;
  87. f++;
  88. break;
  89. }
  90. else if(temp == c[i] && c[i] == c[i + 1] && d[i] != 1){
  91. f++;
  92. d[i] = 1;
  93. break;
  94. } else{
  95. ;
  96. }
  97. }
  98. else if(temp == hold){
  99. if(temp < c[i]){
  100. break;
  101. }else if(temp == c[i] && c[i] != c[i + 1] && d[i] != 1){
  102. d[i] = 1;
  103. f++;
  104. break;
  105. }
  106. else if(temp == c[i] && c[i] == c[i + 1] && d[i] != 1){
  107. f++;
  108. d[i] = 1;
  109. break;
  110. } else
  111. ;
  112. }
  113. }
  114. }
  115. cout<<(l/2) - f<<endl;
  116. }
  117. t--;
  118. }
  119.  
  120. return 0;
  121. }
Success #stdin #stdout 0s 3144KB
stdin
10 
hhpddlnnsjfoyxpciioigvjqzfbpllssuj 
xulkowreuowzxgnhmiqekxhzistdocbnyozmnqthhpievvlj 
dnqaurlplofnrtmh aujteqimwfkjoqodgqaxbrkrwykpmuimqtgulojjwtukjiqrasqejbvfbixnchzsahpnyayutsgecwvcqngzoehrmeeqlgknnb lbafwuoawkxydlfcbjjtxpzpchzrvbtievqbpedlqbktorypcjkzzkodrpvosqzxmpad drngbjuuhmwqwxrinxccsqxkpwygwcdbtriwaesjsobrntzaqbe 
ubulzt 
vxxzsqjqsnibgydzlyynqcrayvwjurfsqfrivayopgrxewwruvemzy 
xtnipeqhxvafqaggqoanvwkmthtfirwhmjrbphlmeluvoa gqdvlchavotcykafyjzbbgmnlajiqlnwctrnvznspiwquxxsiwuldizqkkaawpyyisnftdzklwagv

stdout
10
13
5
26
15
-1
3
13
13
-1