fork download
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int check[40001];
  5. char res[1000001][6];
  6. char input[1000001][6];
  7. int number[1000001];
  8. char temp_res[1000001][6];
  9.  
  10. void merge(int left, int right, int mid)
  11. {
  12. int i = left, j = mid + 1, k = left;
  13. while (i <= mid && j <= right) {
  14. if (strcmp(res[i], res[j]) > 0) strcpy(temp_res[k++], res[i++]);
  15. else strcpy(temp_res[k++], res[j++]);
  16. }
  17. while(i<=mid) strcpy(temp_res[k++], res[i++]);
  18. while(j<=right) strcpy(temp_res[k++], res[j++]);
  19.  
  20. for (int l = left; l <= right; l++) strcpy(res[l], temp_res[l]);
  21. }
  22.  
  23. void divide(int left, int right)
  24. {
  25. if (left >= right) return;
  26. int mid = (left + right) / 2;
  27. divide(left, mid);
  28. divide(mid + 1, right);
  29. merge(left, right, mid);
  30. }
  31.  
  32. int main(void)
  33. {
  34. int n;
  35. char temp[6] = "";
  36. scanf("%d", &n);
  37. for (int i = 0; i < n; i++) {
  38. scanf("%s", input[i]);
  39. scanf("%s", temp);
  40. int num = 0, mod = 1;
  41. for (int j = 0; input[i][j]; j++) {
  42. num += input[i][j] * mod;
  43. mod *= 2;
  44. }
  45. number[i] = num;
  46.  
  47. if (!strcmp(temp, "enter")) check[num] = 1;
  48. else check[num] = 0;
  49. }
  50.  
  51. int idx = 0;
  52. for (int i = 0; i < n; i++) {
  53. if (check[number[i]]) strcpy(res[idx++], input[i]);
  54. }
  55.  
  56. divide(0, idx - 1);
  57. for (int i = 0; i < idx; i++) {
  58. if (i == idx - 1) puts(res[i]);
  59. else {
  60. if (!strcmp(res[i], res[i + 1])) continue;
  61. puts(res[i]);
  62. }
  63. }
  64. }
Success #stdin #stdout 0s 31064KB
stdin
4
Hello enter
Hello leave
World enter
Hello enter
stdout
World
Hello