fork(6) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAXIMUM (100+1)
  5.  
  6. typedef struct
  7. {
  8. int A;
  9. int B;
  10. } Clause;
  11.  
  12. Clause MyClause[MAXIMUM * MAXIMUM];
  13. int MyAssignment[MAXIMUM];
  14. int Temp1[MAXIMUM];
  15. int Valid[MAXIMUM];
  16. int Temp2[MAXIMUM];
  17. int N, C;
  18.  
  19. int Assign(int X)
  20. {
  21. int I, J, K;
  22.  
  23. if (MyAssignment[abs(X)] != -1)
  24. {
  25. if ( (MyAssignment[abs(X)]==0 && X>0)
  26. ||(MyAssignment[abs(X)]==1 && X<0))
  27. return -1;
  28. return 1;
  29. }
  30. MyAssignment[abs(X)]=(X>0)?1:0;
  31.  
  32. for (I = 1; I <= C; I++)
  33. {
  34. if (Valid[I] == 0)
  35. {
  36. if (MyClause[I].A == X || MyClause[I].B == X)
  37. {
  38. Valid[I]=1;
  39. continue;
  40. }
  41. if ( MyClause[I].A == -X)
  42. {
  43. K = Assign(MyClause[I].B);
  44. if (K == -1)
  45. return -1;
  46. }
  47. if ( MyClause[I].B == -X)
  48. {
  49. K = Assign(MyClause[I].A);
  50. if (K == -1)
  51. return -1;
  52. }
  53. }
  54. }
  55. return 1;
  56. }
  57.  
  58. int main()
  59. {
  60. int I, J, K, F;
  61. int D1;
  62. char C2;
  63. while ( EOF != scanf("%d%d", &N, &C))
  64. {
  65. if (N==0)
  66. {
  67. break;
  68. }
  69. F=0;
  70. memset(MyAssignment, -1, 4*MAXIMUM);
  71. memset(Valid, 0, 4*MAXIMUM);
  72. for (I = 1; I <= C; I++)
  73. {
  74. scanf("%d%c",&D1,&C2);
  75. MyClause[I].A=(C2=='w'?(D1)+1:-1*((D1)+1));
  76. scanf("%d%c",&D1,&C2);
  77. MyClause[I].B=(C2=='w'?(D1)+1:-1*((D1)+1));
  78. }
  79.  
  80. if (-1 == Assign(1))
  81. {
  82. printf("bad luck\n");
  83. F = 1;
  84. continue;
  85. }
  86.  
  87. for ( J = 2; J <= N; J++)
  88. {
  89. if (MyAssignment[J] == -1)
  90. {
  91. memcpy(Temp1, MyAssignment, 4*(N+1));
  92. memcpy(Temp2, Valid, 4*(N+1));
  93. if (-1 == Assign(J))
  94. {
  95. memcpy(MyAssignment, Temp1, 4*(N+1));
  96. memcpy(Valid, Temp2, 4*(N+1));
  97. if (-1 == Assign(-J))
  98. {
  99. printf("bad luck\n");
  100. F = 1;
  101. break;
  102. }
  103. }
  104. }
  105. }
  106. if (F == 0)
  107. {
  108. for ( J = 2; J < N; J++)
  109. {
  110. if ( MyAssignment[1] == MyAssignment[J])
  111. {
  112. printf("%dw ",J-1);
  113. }
  114. else
  115. {
  116. printf("%dh ",J-1);
  117. }
  118. }
  119. if ( MyAssignment[1] == MyAssignment[N])
  120. {
  121. printf("%dw",J-1);
  122. }
  123. else
  124. {
  125. printf("%dh",J-1);
  126. }
  127. printf("\n");
  128. }
  129. }
  130. return 0;
  131. }
  132.  
Success #stdin #stdout 0s 2932KB
stdin
Standard input is empty
stdout
Standard output is empty