Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #include <cstdio>
  2.  
  3. #define rad 107
  4.  
  5. FILE *fin, *fout;
  6. using namespace std;
  7. int n, k;
  8.  
  9. struct lista
  10. {
  11. int val;
  12. lista *prev, *next, *next_sqrt;
  13. } first[4];
  14.  
  15. void build(lista *node, int v)
  16. {
  17. for(int i = 1; i<= n; ++i)
  18. {
  19. node->val = v + i;
  20. node->next = new lista();
  21. node->next->prev = node;
  22. node = node->next;
  23. }
  24. }
  25. void init(lista *node)
  26. {
  27. lista *it;
  28. int i;
  29. it = node;
  30. for(i = 1; i <= rad; ++i)
  31. {
  32. if(it->next == NULL || it->next->val == 0)
  33. {
  34. return;
  35. }
  36. if(!node->prev) {node->prev = new lista();node->prev->val =-1;}
  37. node->prev->next_sqrt = it;
  38. it = it->next;
  39. }
  40. for(; i<= n; ++i)
  41. {
  42. node->next_sqrt = it;
  43. node = node->next;
  44. it = it->next;
  45. }
  46. }
  47. void afisare(lista *node)
  48. {
  49. if(node == NULL || node->val == 0)
  50. {
  51. printf("\n");
  52. return ;
  53. }
  54. printf("%d ", node->val);
  55. afisare(node->next);
  56. }
  57. void m_insert(int v, int pos, lista *node)
  58. {
  59. int i = 1;
  60. lista *tmp1, *tmp2, *it;
  61. while(i+rad < pos)
  62. {
  63. i+=rad;
  64. node = node->next_sqrt;
  65. };
  66. while(i+1 < pos)
  67. {
  68. ++i;
  69. node = node->next;
  70. };
  71. ///aici daca pun sa imi afisaeze ceva imi merge programul si face ce trebuie
  72. ///daca las gol intra in loop infinit
  73. tmp1 = node->next;
  74. node->next = tmp2;
  75. tmp2->val = v;
  76. tmp2->prev = node;
  77. tmp2->next = tmp1;
  78. if(node->next_sqrt)
  79. if(node->next_sqrt->next)
  80. tmp2->next_sqrt = node->next_sqrt->next;
  81. tmp1->prev = tmp2;
  82. it = tmp2;
  83. for(; i>= pos-rad && i >=1 ; --i)
  84. {
  85. it = it->prev;
  86. }
  87. while(it != node && tmp2)
  88. {
  89. it->next_sqrt = tmp2;
  90. it = it->next;
  91. tmp2 = tmp2->next;
  92. }
  93. }
  94.  
  95. void citire()
  96. {
  97. scanf("%d%d", &n, &k);
  98. }
  99.  
  100. int main()
  101. {
  102. fin = freopen("grid.in", "r", stdin);
  103. fout = freopen("grid.out", "w", stdout);
  104. citire();
  105. build(&first[1], 0);
  106. build(&first[2], n);
  107. build(&first[3], n+n);
  108. init(&first[1]);
  109. init(&first[2]);
  110. init(&first[3]);
  111. m_insert(18, 5, &first[1]);
  112. afisare(&first[1]);
  113. afisare(&first[2]);
  114. afisare(&first[3]);
  115. fclose(fin);
  116. fclose(fout);
  117. return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement