fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<stdbool.h>
  5. #define MAX 500000
  6. bool ok[MAX] = { false };
  7. struct hear {
  8. char name[21];
  9. };
  10. struct hear arr[MAX];
  11. int x, y,sum=0;
  12. int compare(const struct hear* a, const struct hear* b) {
  13. if(strcmp(a->name, b->name)>0)
  14. return 1;
  15. if (strcmp(a->name, b->name) < 0)
  16. return -1;
  17. return 0;
  18. }
  19. void func(char* temp) {
  20. int low = 0, high = x- 1;
  21. int ans = -1;
  22. while (low <= high) {
  23. int mid = (low + high) / 2;
  24. if (strcmp(arr[mid].name, temp) == 1)
  25. high = mid - 1;
  26. else if (strcmp(arr[mid].name, temp) == -1)
  27. low = mid + 1;
  28. else {
  29. ans = mid;
  30. break;
  31. }
  32. }
  33. if (ans!=-1) {
  34. ok[ans] = true;
  35. }
  36. return;
  37. }
  38. int main() {
  39. scanf("%d %d", &x, &y);
  40.  
  41. for (int i = 0; i < x; i++)
  42. scanf("%s", arr[i].name);
  43. qsort(arr, x, sizeof(struct hear), compare);
  44. for (int i = 0; i < y; i++) {
  45. char temp[21] = { 0 };
  46. scanf("%s", temp);
  47. func(temp);
  48. }
  49. for (int i = 0; i < x; i++)
  50. if (ok[i])
  51. sum++;
  52. printf("%d\n", sum);
  53. for (int i = 0; i < x; i++)
  54. if (ok[i])
  55. printf("%s\n", arr[i].name);
  56. return 0;
  57. }
Success #stdin #stdout 0s 4180KB
stdin
3 4
ohhenrie
charlie
baesangwook
ohhenrie
charlie
baesangwook
clinton
stdout
2
baesangwook
charlie