fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. long long int MyHashTableA[10000]; /*A集合的Hash Table*/
  6. long long int MyHashTableB[10000]; /*B集合的Hash Table*/
  7.  
  8. char Input[500]; /*Input字串*/
  9.  
  10. /*Hash插入元素*/
  11. void MyHash_Insert(long long int N,long long int *MyHashTable)
  12. {
  13. long long int MyTemp=((N+2713)*881)%9967;
  14. if (MyHashTable[MyTemp]==-1)
  15. {
  16. MyHashTable[MyTemp]=N;
  17. }
  18. else
  19. {
  20. while (MyHashTable[++MyTemp]!=-1);
  21. MyHashTable[MyTemp]=N;
  22. }
  23. }
  24. /*Hash找元素*/
  25. int MyHash_Find(long long int N,long long int *MyHashTable)
  26. {
  27. long long int MyTemp=((N+2713)*881)%9967;
  28. if (MyHashTable[MyTemp]==-1)
  29. {
  30. return 0;
  31. }
  32. else
  33. {
  34. while (MyHashTable[MyTemp]!=N)
  35. {
  36. MyTemp++;
  37. if (MyHashTable[MyTemp]==-1 ||MyTemp>=10000)
  38. {
  39. return 0;
  40. }
  41. }
  42. return 1;
  43. }
  44. }
  45.  
  46. int main()
  47. {
  48. int MyTemp; /*輸入暫存*/
  49. int BElementsInA; /*B集合跟A集合交集的大小*/
  50. int Miss; /*B集合是否有A集合沒有的元素*/
  51. int SizeB,SizeA; /*A、B集合的大小*/
  52. char *P; /*字串指標*/
  53.  
  54. int DD;
  55. while (NULL!=gets(Input))
  56. {
  57. memset(MyHashTableA,255,8*10000);
  58. memset(MyHashTableB,255,8*10000);
  59. DD=0;
  60. SizeA=0;
  61. SizeB=0;
  62. BElementsInA=0;
  63. Miss=0;
  64.  
  65.  
  66. /*讀A*/
  67. P=strtok(Input," ");
  68. while (P!=NULL)
  69. {
  70. sscanf(P,"%d",&MyTemp);
  71. if (MyHash_Find(MyTemp,MyHashTableA)==0)
  72. {
  73.  
  74. MyHash_Insert(MyTemp,MyHashTableA);
  75. SizeA++;
  76. }
  77. P=strtok(NULL," ");
  78. }
  79.  
  80. /*讀B*/
  81. gets(Input);
  82. P=strtok(Input," ");
  83. while (P!=NULL)
  84. {
  85. sscanf(P,"%d",&MyTemp);
  86. if (MyHash_Find(MyTemp,MyHashTableB)==0)
  87. {
  88. MyHash_Insert(MyTemp,MyHashTableB);
  89. SizeB++;
  90. if (MyHash_Find(MyTemp,MyHashTableA)==1)
  91. {
  92. BElementsInA++;
  93. }
  94. else
  95. {
  96. Miss=1;
  97. }
  98. }
  99. P=strtok(NULL," ");
  100. }
  101.  
  102. if (SizeA==0&&SizeB!=0) /*A是空集合*/
  103. {
  104. printf("A is a proper subset of B\n");
  105. }
  106. else if (SizeA!=0&&SizeB==0) /*B是空集合*/
  107. {
  108. printf("B is a proper subset of A\n");
  109. }
  110. else if (SizeA!=0&&BElementsInA==0) /*B沒有任何A的元素*/
  111. {
  112. printf("A and B are disjoint\n");
  113. }
  114. else if (SizeA==BElementsInA) /*A的大小與B跟A交集大小一樣*/
  115. {
  116. if (Miss==0) /*B的元素,A都有*/
  117. {
  118. printf("A equals B\n");
  119. }
  120. else /*B有A沒有的元素*/
  121. {
  122. printf("A is a proper subset of B\n");
  123. }
  124. }
  125. else if (SizeA>BElementsInA) /*A的大小比B跟A交集大小還大*/
  126. {
  127. if (Miss==0) /*B的元素,A都有*/
  128. {
  129. printf("B is a proper subset of A\n");
  130. }
  131. else /*B有A沒有的元素*/
  132. {
  133. printf("I'm confused!\n");
  134. }
  135. }
  136. else
  137. {
  138. printf("I miss some cases!\n");
  139. }
  140. }
  141. return 0;
  142. }
  143.  
Success #stdin #stdout 0.01s 2836KB
stdin
Standard input is empty
stdout
Standard output is empty