Explorar o código

перенос с github

jezv hai 1 ano
achega
ad80a9d390
Modificáronse 5 ficheiros con 141 adicións e 0 borrados
  1. 1 0
      .gitignore
  2. 9 0
      README.md
  3. 96 0
      Vector.h
  4. BIN=BIN
      vector_main
  5. 35 0
      vector_main.cpp

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+.vscode

+ 9 - 0
README.md

@@ -0,0 +1,9 @@
+| N  | K  | Ответ  | Время  |
+| ------------ | ------------ | ------------ | ------------ |
+| 1000  | 3  | 601  |  0.0001 |
+| 5000  | 3  | 2861  | 0.001  |
+| 10000  | 3  | 2869  | 0.005  |
+| 50000  | 3  | 11744  | 0.4  |
+| 100000  | 3  | 92620  | 2 |
+| 500000  | 3  | 450133  | 93 |
+| 1000000  | 3  | 637798  | 434.8 |

+ 96 - 0
Vector.h

@@ -0,0 +1,96 @@
+#include <iostream>
+#include <string.h>
+
+
+class Vector
+{
+    private:
+    int* data;
+    
+    public:
+    int lenght;
+    
+    Vector()
+    {
+        lenght = 0;
+        data = new int[lenght];
+    }
+
+    Vector(Vector &v)
+    {
+        lenght = v.lenght;
+        data = new int[lenght];
+        memcpy(data, v.data, lenght*4);
+    }
+
+    void add(int value)
+    {
+        int* next_data = new int[lenght+1];
+        memcpy(next_data, data, lenght*4);
+        next_data[lenght] = value;
+        delete[] data;
+        data = next_data;
+        lenght++;
+    }
+
+    void add(int value, int index)
+    {
+        if (index >= lenght)
+            throw "Index bigger then lenght";
+        int* next_data = new int[lenght+1];
+        memcpy(next_data, data, index*4);
+        next_data[index] = value;
+        memcpy(next_data+index+1, data+index, (lenght-index)*4);
+        delete[] data;
+        data = next_data;
+        lenght++;
+    }
+
+    int pop()
+    {
+        int* next_data = new int[lenght-1];
+        int value = data[lenght-1];
+        memcpy(next_data, data, (lenght-1)*4);
+        delete[] data;
+        data = next_data;
+        lenght--;
+        return value;
+    }
+
+    int pop(int index)
+    {
+        if (index >= lenght)
+            throw "Index bigger then lenght";
+        int* next_data = new int[lenght-1];
+        int value = data[index];
+        memcpy(next_data, data, index*4);
+        memcpy(next_data+index, data+index+1, (lenght-index-1)*4);
+        delete[] data;
+        data = next_data;
+        lenght--;
+        return value;
+    }
+
+    int operator[](int index)
+    {
+        if (index >= lenght)
+            throw "Index bigger then lenght";
+        return data[index];
+    }
+
+    friend std::ostream &operator <<(std::ostream &os, Vector &v)
+    {
+        os << '[';
+        for(int i = 0; i<v.lenght-1; i++)
+        {
+            os << v.data[i] << ',';
+        }
+        os << v.data[v.lenght-1] << ']';
+        return os;
+    }
+
+    ~Vector()
+    {
+        delete[] data;
+    }
+};

BIN=BIN
vector_main


+ 35 - 0
vector_main.cpp

@@ -0,0 +1,35 @@
+#include "Vector.h"
+#include <time.h>
+
+using namespace std;
+
+
+void iosif(int count, int step)
+{
+    clock_t start = clock();
+    Vector v;
+    for(int i = 0; i < count; i++) {
+        v.add(i);
+    }
+    // cout << v;
+    int i = 0;
+    while(v.lenght > 1)
+    {
+        // cout << v;
+        v.pop(i);
+        i += step-1;
+        i %= v.lenght;
+    }
+    // cout << v;
+    clock_t end = clock();
+    double sec = (double)(end - start) / CLOCKS_PER_SEC;
+    cout << "time: " << sec << " answer: " << v[0];
+}
+
+
+int main() {
+    iosif(1000, 3);
+    iosif(5000, 3);
+    iosif(10000, 3);
+    iosif(50000, 3);
+}