Submission #824854

# Submission time Handle Problem Language Result Execution time Memory
824854 2023-08-14T11:12:59 Z Hanksburger Hexagonal Territory (APIO21_hexagon) C++17
0 / 100
861 ms 1048576 KB
#include "hexagon.h"
#include <bits/stdc++.h>
using namespace std;
const pair<long long, long long> dir[7]={{0, 0}, {1, 0}, {0, 1}, {-1, 1}, {-1, 0}, {0, -1}, {1, -1}};
const long long mod=1000000007;
vector<pair<long long, long long> > coord, tmp, vertices;
vector<long long> d, l;
int draw_territory(int nn, int aa, int bb, vector<int> dd, vector<int> ll)
{
    long long n=nn, a=aa, b=bb, curX=0, curY=0, mx=-1e9, mn=1e9, corner=0, flip, sz, ind, sum1=0, sum2=0;
    for (long long i=0; i<n; i++)
        d.push_back(dd[i]), l.push_back(ll[i]);
    for (long long i=0; i<n; i++)
    {
        for (long long j=0; j<l[i]; j++)
        {
            if (mx<curX)
            {
                mx=curX;
                if (d[(i+n-1)%n]==2 || (d[(i+n-1)%n]==1 && (d[i]==2 || d[i]==3)) || (d[(i+n-1)%n]==6 && d[i]==2))
                    flip=0;
                else
                    flip=1;
            }
            tmp.push_back({curX, curY});
            curX+=dir[d[i]].first;
            curY+=dir[d[i]].second;
        }
    }
    if (flip)
        reverse(tmp.begin(), tmp.end());
//    cout << "flip " << flip << '\n';
    sz=tmp.size();
    for (long long i=0; i<sz; i++)
    {
        coord.push_back(tmp[i]);
        if (tmp[(i+1)%sz].first==tmp[i].first-1 && tmp[(i+1)%sz].second==tmp[i].second+1)
            coord.push_back({tmp[i].first-1, tmp[i].second});
        else if (tmp[(i+1)%sz].first==tmp[i].first+1 && tmp[(i+1)%sz].second==tmp[i].second-1)
            coord.push_back({tmp[i].first+1, tmp[i].second});
    }
    sz=coord.size();
    mx=-1e9;
    for (long long i=0; i<sz; i++)
    {
    //    cout << "coord " << coord[i].first << ' ' << coord[i].second << '\n';
        if (mx<coord[i].first)
        {
            mx=coord[i].first;
            mn=coord[i].second;
            ind=i;
        }
        else if (mx==coord[i].first && mn>coord[i].second)
        {
            mx=coord[i].first;
            mn=coord[i].second;
            ind=i;
        }
    }
    for (long long i=ind; i<ind+sz; i++)
    {
        if (coord[(i+1)%sz].first==coord[i%sz].first+1)
        {
            if (corner==0)
                corner=2;
            else if (corner==1)
            {
                vertices.push_back({coord[i%sz].first, coord[i%sz].second+1});
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second+1});
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second});
                corner=2;
            }
            else if (corner==2)
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second});
            else
            {
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second+1});
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second});
                corner=2;
            }
        }
        else if (coord[(i+1)%sz].first==coord[i%sz].first-1)
        {
            if (corner==0)
            {
                vertices.push_back({coord[i%sz].first, coord[i%sz].second});
                vertices.push_back({coord[i%sz].first, coord[i%sz].second+1});
                corner=1;
            }
            else if (corner==1)
                vertices.push_back({coord[i%sz].first, coord[i%sz].second+1});
            else if (corner==2)
            {
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second});
                vertices.push_back({coord[i%sz].first, coord[i%sz].second});
                vertices.push_back({coord[i%sz].first, coord[i%sz].second+1});
                corner=1;
            }
            else
                corner=1;
        }
        else if (coord[(i+1)%sz].second==coord[i%sz].second+1)
        {
            if (corner==0)
                vertices.push_back({coord[i%sz].first, coord[i%sz].second});
            else if (corner==1)
                corner=0;
            else if (corner==2)
            {
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second});
                vertices.push_back({coord[i%sz].first, coord[i%sz].second});
                corner=0;
            }
            else
            {
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second+1});
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second});
                vertices.push_back({coord[i%sz].first, coord[i%sz].second});
                corner=0;
            }
        }
        else
        {
            if (corner==0)
            {
                vertices.push_back({coord[i%sz].first, coord[i%sz].second});
                vertices.push_back({coord[i%sz].first, coord[i%sz].second+1});
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second+1});
                corner=3;
            }
            else if (corner==1)
            {
                vertices.push_back({coord[i%sz].first, coord[i%sz].second+1});
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second+1});
                corner=3;
            }
            else if (corner==2)
                corner=3;
            else
                vertices.push_back({coord[i%sz].first-1, coord[i%sz].second+1});
        }
    }
    if (corner==1)
    {
        vertices.push_back({coord[ind].first, coord[ind].second+1});
        corner=3;
    }
    if (corner==3)
    {
        vertices.push_back({coord[ind].first-1, coord[ind].second+1});
        corner=2;
    }
    if (corner==2)
        vertices.push_back({coord[ind].first-1, coord[ind].second});
    sz=vertices.size();
    for (long long i=0; i<sz; i++)
    {
        sum1=(sum1+vertices[i].first*vertices[(i+1)%sz].second)%mod;
        sum2=(sum2+vertices[i].second*vertices[(i+1)%sz].first)%mod;
    }
    return abs(sum1-sum2)%mod*500000004%mod*a%mod;
}

Compilation message

hexagon.cpp: In function 'int draw_territory(int, int, int, std::vector<int>, std::vector<int>)':
hexagon.cpp:10:27: warning: unused variable 'b' [-Wunused-variable]
   10 |     long long n=nn, a=aa, b=bb, curX=0, curY=0, mx=-1e9, mn=1e9, corner=0, flip, sz, ind, sum1=0, sum2=0;
      |                           ^
hexagon.cpp:145:38: warning: 'ind' may be used uninitialized in this function [-Wmaybe-uninitialized]
  145 |         vertices.push_back({coord[ind].first, coord[ind].second+1});
      |                                      ^
hexagon.cpp:30:5: warning: 'flip' may be used uninitialized in this function [-Wmaybe-uninitialized]
   30 |     if (flip)
      |     ^~
# Verdict Execution time Memory Grader output
1 Runtime error 861 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 832 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 13 ms 12740 KB Output is correct
2 Correct 10 ms 10968 KB Output is correct
3 Correct 13 ms 12112 KB Output is correct
4 Correct 10 ms 10608 KB Output is correct
5 Correct 14 ms 12756 KB Output is correct
6 Correct 16 ms 13988 KB Output is correct
7 Correct 11 ms 7424 KB Output is correct
8 Correct 18 ms 19924 KB Output is correct
9 Correct 18 ms 20032 KB Output is correct
10 Correct 18 ms 19904 KB Output is correct
11 Incorrect 21 ms 13664 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 807 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 819 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -