Advertisement
a53

fazan

a53
Nov 9th, 2021
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("fazan.in");
  5. char C[35][25];
  6. int X[35], P[35], n, m, ok;
  7. void afisare()
  8. {
  9. ok=1;
  10. for(int i=1; i<=m; i++)
  11. cout<<C[X[i]]<<" ";
  12. cout<<'\n';
  13. }
  14. int fazan(char s1[], char s2[])
  15. {
  16. int ls=strlen(s1);
  17. if(s1[ls-2]==s2[0] && s1[ls-1]==s2[1])
  18. return 1;
  19. return 0;
  20. }
  21. int valid(int k)
  22. {
  23. int sw=1, ok=1;
  24. if(k>1)
  25. ok=fazan(C[X[k-1]],C[X[k]]);
  26. for(int j=1;j<k;j++)
  27. if(X[j]==X[k])
  28. sw=0;
  29. return sw && ok;
  30. }
  31. void back(int k)
  32. {
  33. for(int i=1; i<=n; i++)
  34. if(!P[i])
  35. {
  36. X[k]=i;
  37. P[i]=1;
  38. if(valid(k))
  39. if(k==m)
  40. afisare();
  41. else
  42. back(k+1);
  43. P[i]=0;
  44. }
  45. }
  46.  
  47. int main()
  48. {
  49. cin>>n>>m;
  50. cin.get();
  51. for(int i=1; i<=n; i++)
  52. cin>>C[i];
  53. for(int i=1; i<n; ++i)
  54. for(int j=i+1; j<=n; ++j)
  55. if(strcmp(C[i],C[j])>0)
  56. swap(C[i],C[j]);
  57. back(1);
  58. if(!ok)
  59. cout<<"IMPOSIBIL";
  60. return 0;
  61. }
  62. /**
  63. SO
  64. #include <iostream>
  65. using namespace std;
  66. string S[32];
  67. int X[32],n,m,P[32],gasit;
  68.  
  69. void afisare()
  70. {
  71. for(int i=1;i<=m;i++)
  72. cout<<S[X[i]]<<" ";
  73. cout<<endl;
  74. gasit=1;
  75. }
  76.  
  77. int ok(int k)
  78. {
  79. if(k>1 && S[X[k]].substr(0,2)!=S[X[k-1]].substr(S[X[k-1]].length()-2))
  80. return 0;
  81. return 1;
  82. }
  83.  
  84. void back(int k)
  85. {
  86. for(int i=1;i<=n;i++)
  87. if(!P[i])
  88. {
  89. X[k]=i;
  90. P[i]=1;
  91. if(ok(k))
  92. if(k==m) afisare();
  93. else back(k+1);
  94. P[i]=0;
  95. }
  96. }
  97.  
  98. int main()
  99. {
  100. cin>>n>>m;
  101. for(int i=1;i<=n;i++)
  102. cin>>S[i];
  103. for(int i=1;i<n;i++)
  104. for(int j=i+1;j<=n;j++)
  105. if(S[i]>S[j])
  106. swap(S[i],S[j]);
  107. back(1);
  108. if(!gasit) cout<<"IMPOSIBIL";
  109. return 0;
  110. }
  111. ........................................
  112. SO-2
  113. #include <iostream>
  114. #include <cstring>
  115. using namespace std;
  116. char S[32][22];
  117. int X[32],n,m,P[32],gasit;
  118.  
  119. void afisare()
  120. {
  121. for(int i=1;i<=m;i++)
  122. cout<<S[X[i]]<<" ";
  123. cout<<endl;
  124. gasit=1;
  125. }
  126.  
  127. int ok(int k)
  128. {
  129. if(k>1 && strncmp(S[X[k]],S[X[k-1]]+strlen(S[X[k-1]])-2,2)!=0)
  130. return 0;
  131. return 1;
  132. }
  133.  
  134. void back(int k)
  135. {
  136. for(int i=1;i<=n;i++)
  137. if(!P[i])
  138. {
  139. X[k]=i;
  140. P[i]=1;
  141. if(ok(k))
  142. if(k==m) afisare();
  143. else back(k+1);
  144. P[i]=0;
  145. }
  146. }
  147.  
  148. int main()
  149. {
  150. cin>>n>>m;
  151. for(int i=1;i<=n;i++)
  152. cin>>S[i];
  153. for(int i=1;i<n;i++)
  154. for(int j=i+1;j<=n;j++)
  155. if(strcmp(S[i],S[j])>0)
  156. swap(S[i],S[j]);
  157. back(1);
  158. if(!gasit) cout<<"IMPOSIBIL";
  159. return 0;
  160. }
  161. */
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement