#include<stdlib.h>
#include<stdio.h>

typedef struct Point{
    int x;
    int y;
}Point;

typedef struct Polygon{
    int num_vertices;
    Point *vertices;
}Polygon;

void addPolygon(Polygon* ps, int n, int v){
    int i;
    for(i = 0; i<n; i++){
        (ps+i)->vertices = malloc(sizeof(Point)*v);
        (ps+i)->num_vertices = v;
    }
}

int main() {
    int n1=5, n2=10, v1=3, v2=4;
    //n1個v1邊形: 5個3邊形
    //n2個v2邊形: 10個4邊形
    int i;
    Polygon* ps;
    ps = malloc(sizeof(Polygon)*(n1+n2));
    for(i = 0; i<n1+n2;i++){
        if(i<n1){
            (ps+i)->vertices = malloc(sizeof(Point)*v1);
            (ps+i)->num_vertices = v1;
        }
        else{
            (ps+i)->vertices = malloc(sizeof(Point)*v2);
            (ps+i)->num_vertices = v2;
        }
    }
    
    for(i = 0; i<n1+n2;i++){
        free((ps+i)->vertices);
    }
    free(ps);
    
    ps = malloc(sizeof(Polygon)*n1);
    addPolygon(ps, n1, v1);
    ps = realloc(ps, sizeof(Polygon)*(n1+n2));
    addPolygon(ps+n1, n2, v2);
    for(i = 0; i<n1+n2;i++){
        free((ps+i)->vertices);
    }
    free(ps);
    
    return EXIT_SUCCESS;
}