the_art_of_war

Untitled

Jun 1st, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. int inf_int=1e8;
  7. ll inf_ll=1e17;
  8. typedef pair<int,int> pii;
  9. typedef pair<ll,ll> pll;
  10. #define pb push_back
  11. const double pi=3.1415926535898;
  12. #define dout if(debug) cout
  13. #define fi first
  14. #define se second
  15. #define sp setprecision
  16. #define mp make_pair
  17. #define siz(a) a.size()
  18. #define sz size()
  19.  
  20. const ll mod = 1e9+9;
  21. const int MAXN =1e6+10;
  22. bool debug = false;
  23.  
  24. typedef long double dbl;
  25.  
  26. int n, maxi, tot;
  27. vector < pair <int, int> > q;
  28. vector <int> g[111111];
  29. int ans[111111];
  30. void solve()
  31. {
  32. cin >> n;
  33. for (int i = 1; i <= n; i++)
  34. {
  35. int l;
  36. cin >> l;
  37. // q[i].fi = l;
  38. // q[i].se = i;
  39. g[l].pb(i);
  40. maxi = max(maxi,l);
  41. }
  42. //sort (q+1,q+n+1);
  43. //reverse(q+1,q+n+1);
  44. if (maxi % 2)
  45. {
  46. for (int i = maxi; i >= maxi/2; i--)
  47. {
  48. if (siz(g[i]) < 2)
  49. {
  50. cout << "Epic fail";
  51. return;
  52. }
  53. tot += siz(g[i]);
  54. }
  55. int tmp = (maxi+1)/2;
  56. if (siz(g[tmp]) != 2 || tot != n)
  57. {
  58. cout << "Epic fail";
  59. return;
  60. }
  61. int last = g[maxi][siz(g[maxi])-1];
  62. g[maxi].pop_back();
  63. for (int i = maxi - 1; i >= maxi/2; i--)
  64. {
  65. int need = g[i][siz(g[i])-1];
  66. g[i].pop_back();
  67. q.pb(mp(last,need));
  68. ans[i] = need;
  69. last = need;
  70. }
  71. for (int i = tmp; i <= maxi; i++)
  72. {
  73. int need = g[i][siz(g[i])-1];
  74. g[i].pop_back();
  75. q.pb(mp(last,need));
  76. last = need;
  77. }
  78. for (int i = maxi; i > tmp; i--)
  79. {
  80. while (!(g[i].empty()))
  81. {
  82. int need = g[i][siz(g[i])-1];
  83. g[i].pop_back();
  84. q.pb(mp(ans[i-1],need));
  85. }
  86. }
  87. cout << "I got it" << endl;
  88. for (int i = 0; i < q.sz; i++)
  89. {
  90. cout << q[i].fi << " " << q[i].se << endl;
  91. }
  92. return;
  93. }
  94. else
  95. {
  96. cout << "@";
  97. for (int i = maxi; i >= maxi/2; i--)
  98. {
  99. if (siz(g[i]) < 2)
  100. {
  101. cout << "Epic fail";
  102. cout << "!";
  103. return;
  104. }
  105. tot += siz(g[i]);
  106. }
  107. int tmp = maxi/2;
  108. if (siz(g[tmp]) != 2 || tot != n)
  109. {
  110. cout << "Epic fail";
  111. return;
  112. }
  113. int last = g[maxi][siz(g[maxi])-1];
  114. g[maxi].pop_back();
  115. for (int i = maxi - 1; i >= maxi/2; i--)
  116. {
  117. int need = g[i][siz(g[i])-1];
  118. g[i].pop_back();
  119. q.pb(mp(last,need));
  120. ans[i] = need;
  121. last = need;
  122. }
  123. for (int i = tmp+1; i <= maxi; i++)
  124. {
  125. int need = g[i][siz(g[i])-1];
  126. g[i].pop_back();
  127. q.pb(mp(last,need));
  128. last = need;
  129. }
  130. for (int i = maxi; i > tmp; i--)
  131. {
  132. while (!(g[i].empty()))
  133. {
  134. int need = g[i][siz(g[i])-1];
  135. g[i].pop_back();
  136. q.pb(mp(ans[i-1],need));
  137. }
  138. }
  139. cout << "I got it" << endl;
  140. for (int i = 0; i < q.sz; i++)
  141. {
  142. cout << q[i].fi << " " << q[i].se << endl;
  143. }
  144. return;
  145.  
  146. }
  147. }
  148.  
  149.  
  150.  
  151. #define FILE "decode"
  152. int main()
  153. {
  154. #ifdef zxc
  155. freopen("input.txt","r",stdin);
  156. // freopen("output.txt","w",stdout);
  157. #else
  158. freopen(FILE".in","r",stdin);
  159. freopen(FILE".out","w",stdout);
  160. #endif // zxc
  161.  
  162.  
  163. ios_base::sync_with_stdio(0);
  164. cin.tie(0);
  165. cout.tie(0);
  166.  
  167.  
  168. int t=1;
  169. while(t--)
  170. solve();
  171. return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment