Kogut_Ivan's blog

By Kogut_Ivan, 8 months ago, translation, In English

We hope you enjoyed the contest! Thank you for participating! This is our second official round on Codeforces, so we would be happy to hear your feedback in the comments and in the mini-survey below.

How did you like the contest?
Which problems did you like (you can choose multiple)?
Which problems did you not like (you can choose multiple)?

2132A - Homework

Idea: Wileyne; developer: Wileyne

Editorial
Solution

2132B - The Secret Number

Idea: fstilus; developer: fstilus

Hint
Editorial
Solution

2132C1 - The Cunning Seller (easy version)

Idea: fstilus; developer: KotlechkovEgor

Hint 1
Hint 2
Hint 3
Editorial
Solution

2132C2 - The Cunning Seller (hard version)

Idea: Boodoochai; developer: KotlechkovEgor

Hint 1
Hint 2
Editorial
Solution

2132D - From 1 to Infinity

Idea: fstilus; developer: fstilus

Hint 1
Hint 2
Editorial
Solution

2132E - Arithmetics Competition

Idea: EzikBro; developer: EzikBro

Hint 1
Hint 2
Hint 3
Hint 4
Editorial
Solution 1
Solution 2

2132F - Rada and the Chamomile Valley

Idea: Friendiks, Wileyne; developers: Friendiks, Wileyne

Hint 1
Hint 2
Hint 3
Hint 4
Editorial
Solution

2132G - Famous Choreographer

Idea: fstilus; developers: fstilus, pskobx

Hint 1
Hint 2
Hint 3
Hint 4
Hint 5
Hint 6
Editorial
Solution
  • Vote: I like it
  • -133
  • Vote: I do not like it

»
8 months ago, hide # |
Rev. 3  
Vote: I like it 0 Vote: I do not like it

I found the solution for C2 1 minute after the contest ended! I am so sad :(

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it -8 Vote: I do not like it

    ++ :(

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    Can you tell me your method(s) to solve the C2? I don't understand their solution.Thanks

    • »
      »
      »
      8 months ago, hide # ^ |
       
      Vote: I like it 0 Vote: I do not like it

      For C2, every time you break a deal down into 3 smaller ones, you are adding 2 more deals to the count of deals meaning that the amount of times you can break a deal down is (k — min_k) / 2. Their solution for C2 was basically trying to break down all the deals that they could using the for (int i = (int)tr.size() - 1; i >= 1; --i) loop which could either run until the end or break when k < tr[i] (a.k.a running out of times they could break down a deal).

    • »
      »
      »
      8 months ago, hide # ^ |
       
      Vote: I like it 0 Vote: I do not like it

      In fact, you should buy as less as you can in one deal. but, the limit of k makes you must make some large deals. So, you should use as less as you can deals to fit the limits by greedy. and an important step is to find out that break a great deal is better than break a little deal.So you break the largest deal into three small deal and the count of deal plus 2.Repeat it untill reach the limit

    • »
      »
      »
      8 months ago, hide # ^ |
       
      Vote: I like it +1 Vote: I do not like it

      Greedly to buy smaller groups,greedly to make biggest smaller.

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    Same man, I regret sitting for the contest 15 min late

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    I was quite close as well, but, I'm glad I didn't give up!

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Thanks for the fast editorial and the contest... very mathematical

»
8 months ago, hide # |
 
Vote: I like it +17 Vote: I do not like it

Thank you for the contest! The problems felt very new and refreshing.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

This contest is below the average not good and not bad.

»
8 months ago, hide # |
 
Vote: I like it +4 Vote: I do not like it

Amazing contest! C2 was really fun.

»
8 months ago, hide # |
 
Vote: I like it -11 Vote: I do not like it

F is a piece of cake if you've solved this

»
8 months ago, hide # |
 
Vote: I like it +15 Vote: I do not like it

Thank you for the contest ! , although I did unrated , but definitely one of my most favorite Div3's .

Kudos to authors.

»
8 months ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

HELP

I did exact same thing as mentioned in editorial for problem F but it gives WA,any help is appreciated Kogut_Ivan .

Submission — 334939521

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

F was easy but i missed the output format i thought if there are no valid lanes then just output single line -1 and move for another testcase:(

»
8 months ago, hide # |
Rev. 3  
Vote: I like it +3 Vote: I do not like it

D is already online available: Geek for geeks cses

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I am here after hearing that 2132E - Arithmetics Competition is practically equivalent to 2063D - Game With Triangles. As the coauthor of that problem, I must confirm that this is true. So you cannot fail to disappoint, huh...

»
8 months ago, hide # |
 
Vote: I like it +23 Vote: I do not like it

I demand justice for ternary search solution for problem E! This problem is actually so fun to do ternary search with, as the moment you realize the function is linear brings so much satisfaction (from my 10-second long experience, it is indeed satisfactory)!

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Is there a way to filter submissions on programming language? I would like to try to hack submissions, but most of them are in C++ and I code in Python.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

C2 was really fun! Happy for being able to solve it just before the contest ended.

E looks interesting, will try to solve it later..

»
8 months ago, hide # |
 
Vote: I like it +1 Vote: I do not like it

D is similar like digit queries of CSES problemset. I already solved digit queries still not able to solve the d problem sad :(

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Today's contest so bad for me , i don't know what happened to me today , i don't have words..

long long val(int x) {
    return 1ll*fastPow(3, x+1) + 1LL * x * fastPow(3, x-1);
}
int div(int n){
    int cnt=0;
    while(n>0){
        n/=3;
        cnt++;
    }
    return cnt-1;
}
void coderaryan() {
    // executing code from here 
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        int mult=n-n%3;
        int mod=n%3;
        int v=0;
        while(mult%3==0 && mult>0){
            v++;
            mult/=3;
        }
        dbg(mult),dbg(mod),dbg(v);
        cout<<val(1)<<endl;
        cout<<(1ll*val(v)*mult)+(1ll*val(0)*mod)<<endl;
    }
}

can any one tell why this wrong for last test case 260010000

»
8 months ago, hide # |
 
Vote: I like it +14 Vote: I do not like it

F was really amazing!

»
8 months ago, hide # |
 
Vote: I like it +17 Vote: I do not like it

The problems were too mathematical and time consuming. Personally, I did not like the contest.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Who is supposed to know or think this: If Vadim appends k zeros to the number x, what will be the ratio between n and x? I'm not doing math olympiad.

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it +6 Vote: I do not like it

    Actually it's very easy to find the solution once one think like a mathematician.

»
8 months ago, hide # |
 
Vote: I like it +5 Vote: I do not like it

Math forces. I did e and f but not c2 and d, hope to see another div 3 soon ☺️

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Can someone explain why ternary search works in E but not binary search?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I didn't understand "C1", statement and solution, why !

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    see c1 is like you have to sell n watermelon but the scene you know the cost for selling 3^x melons so what you have to you have to break or decompose the number to 3 power

    how i approach may be wrong if n=20 so you write it like nearest factor of 3 and some remainder which will make 18 +2 ok now you have to decompose the 18 to 3 power

    you can write like 3^2*2+2-> 3^2*2+3^0+3^0 ok this is how you can write 20 now just compute values

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    In C1, the minimum number of transactions is equivalent to representing the original number in ternary

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Please somebody explain me whats wrong in my solution for B 334909623, please help

»
8 months ago, hide # |
 
Vote: I like it +8 Vote: I do not like it

С2 is so nice

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

in C2 why do we always transfer from tr[i] to tr[i-1], in that order. I mean why cant we start from tr[0] to tr[i-1] and transfer from tr[i] whenever possible? this basically fails on the 180th number of tc 2 and i have no clue why.

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    The difference between the values grows proportionally to x, and the greater x is, the greater the difference between the costs of buying 3^i watermelons and 3^(i-1). So, we want to minimize cost => we want to transfer from greater values.

    • »
      »
      »
      8 months ago, hide # ^ |
      Rev. 2  
      Vote: I like it 0 Vote: I do not like it

      yeah but what i meant was why cant i directly go from 3^i to 3^0 if k permits. this too has become clear because we gain more from killing off the highest powers of 3 than by creating more lower powers of 3

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    Lets see the case when $$$n = 20$$$ and $$$k=14$$$.

    If you get the base 3 representation of $$$n$$$, you obtain $$$(20)_{10} =(202)_3$$$. This representation is really useful, because you get the minimum number of deals $$$(2+0+2) = 4$$$, that you need to obtain exactly $$$20$$$ watermelons (answer of C1). Then the cost will be $$$((2\cdot(3^3 + 2\cdot3^1)) + (0\cdot(3^2 + 1\cdot3^0)) + (2\cdot(3^1 + 0\cdot3^{-1}))) = 72$$$.

    Now, you have to note that $$$(202)_3 \equiv (2\cdot3^2 + 0\cdot3^1 + 2\cdot3^0)$$$, but you can also represent the $$$(2\cdot3^2)$$$ as $$$(1\cdot3^2 + 3\cdot3^1)$$$ or as $$$(0\cdot3^2 + 6\cdot3^1)$$$ or even as $$$(0\cdot3^2 + 0\cdot3^1 + 18\cdot3^0)$$$. In fact, you can get multiples representation of the same number following this format and this representation tells you how many deals you need to obtain it, and with that representation you also can get the cost.

    Finally, it's important to see that if you represent a power of 3 with a smaller one, you obtain a smaller cost. Since we want to minimize the cost, then you want to reduce the bigger power of 3 in your base 3 representation. E.g., the cost of $$$(2\cdot3^2 + 0\cdot3^1 + 2\cdot3^0)$$$ was $$$72$$$ but the cost of $$$(1\cdot3^2 + 3\cdot3^1 + 2\cdot3^0)$$$ is $$$69$$$. Note how from one representation to the other, you used $$$2$$$ more deals $$$(1+3+2) = 6$$$.

    The minimum cost will be obtained if you buy the watermelon using just deals of type $$$3^0$$$, so yes you can move from the $$$3^i$$$ to the $$$3^0$$$, but this is not always possible. Then, the better approach is to simulate the moving process in order to ensure the best answer.

    I will simulate the process of the algorithm below:

    REP____| k__| cost

    2_0_2___| 4__| 72

    1_3_2___| 6__| 69

    0_6_2___| 8__| 66

    0_5_5___| 10_| 65

    0_4_8___| 12_| 64

    0_3_11__| 14_| 63 ----- FINNISH

    0_2_14__| 16_| 62 ----- k NOT BIG ENOUGH

    0_1_17__| 18_| 61 ----- k NOT BIG ENOUGH

    0_0_20__| 20_| 60 ----- k NOT BIG ENOUGH

    This algorithm is slow, and will give TLE (check here: 334956210), but you can accelerate easily just computing the decrement amount that you have to do in each power of 3 instead of simulating the entire process as you can see here: 334950832.

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    If the buyer has an upper limit of k, and they can still make

    $$$ x = k - \text{min}_k $$$

    extra deals, then it is always optimal to convert

    $$$ 1 \;\text{deal of } 3^{x+1} \;\;\Rightarrow\;\; 3 \;\text{deals of } 3^x $$$

    (Proof is given in the editorial).


    Example:

    • $$$n = 29$$$
    • $$$tr = [2, 0, 0, 1]$$$
    • powers = $$$[1, 3, 9, 27]$$$

    Here the seller sells in powers of $$$3$$$.

    • min_k = 3
    • Buyer makes:
    • 2 deals of $$$3^0$$$
    • 0 deals of $$$3^1$$$
    • 0 deals of $$$3^2$$$
    • 1 deal of $$$3^3$$$

    So total:

    $$$ 2 \cdot 1 + 0 \cdot 3 + 0 \cdot 9 + 1 \cdot 27 = 29 $$$

    Thus exactly 3 deals (= min_k).


    Now if the buyer is allowed more deals ($$$k \gt \text{min}_k$$$):

    • Traverse from right → left in tr.
    • Whenever possible, convert
    $$$ 1 \;\text{deal of } 3^3 \;\;\Rightarrow\;\; 3 \;\text{deals of } 3^2 $$$

    That’s why we go right → left: to break a larger power into smaller powers (ex — Convert 1 deal of 3^3 into 3 deal of 3^2)

    By doing this, the total cost reduces, which is our objective.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I hope i can solve 4 problems at least in next Div3!

»
8 months ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

Learned a lot more about CF contests, just need to do more problems, need to get more better and enjoy it more, hopefully in the next div 4 or div 3 I get better :). I enjoyed it being mathematical but realized python is limiting me, need to start using C++ :)

Thanks for the contest, hoping yall have a great day :)

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

thanks guys, good work

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I have Just fully understanded how to buy watermelons in k deals :(

»
8 months ago, hide # |
 
Vote: I like it +10 Vote: I do not like it

E and C2 are interesting!But I don't like D.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Hello! If my rating is 1400 right now, what number of tasks in a contest should i ac so that it won't drop the rating? Thx

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

334980092 [C2]Can someone help check why my code wrong on test2?

»
8 months ago, hide # |
 
Vote: I like it +2 Vote: I do not like it

Simpler solution to D:

Binary search for the largest $$$L$$$ such that the total number of digits in $$$1, ..., L$$$ is at most $$$k$$$. Then, compute the sum of digits of all numbers in $$$1, ..., L$$$ as well as the partial piece of $$$L + 1$$$.

The number/sum of digits in $$${1, ..., N}$$$ are standard problems. The latter can be calculated via a digit-dp like approach.

Code: 334983266

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

in C2, why are we decreasing the value of k after doing the minimum number of deals (in the solution code what is the sense of the line k-=min_k; k/=2; ?)

»
8 months ago, hide # |
 
Vote: I like it -15 Vote: I do not like it

I think C2 s a little awful in quality. It does not conclude high-qualitied thinking but is tricky in details, which is very annoying.

P.S. I am a Chinese student, my English is not good, please understand.

»
8 months ago, hide # |
 
Vote: I like it +7 Vote: I do not like it

A good contest! I love it.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Was so close to solve the D but couldn't figure out how to handle a number so big

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Why should we do k /= 2 in C2 solution?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Good C2 but bad F and G.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

My solution for B using Binary search.

// Written by Nirupam (cf: Nirupam)
#include<bits/stdc++.h>
using namespace std;

#define ll long long 

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    int t; cin>>t;
    while(t--){
        ll n; cin>>n;

        set<ll> ans;

        for(ll i=10;i<=1e18;i*=10){
            ll l = 0,r = 1e18/i,mid;
            while(r > l + 1){
                mid = l + (r-l)/2;
                if(1ll*mid*i + mid < n){
                    l = mid;
                }else if(1ll*mid*i + mid > n){
                    r = mid;
                }else{
                    ans.insert(mid);
                    break;
                }  
            } 
        }

        if(ans.empty()){
            cout<<0<<'\n';
        }else{
            cout<<ans.size()<<'\n';
            for(auto x : ans){
                cout<<x<<" ";
            }

            cout<<'\n';
        }
    }
    
    return 0;
}
»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

For problem C1 the stated solution in the editorial for lets say 11 watermelons would be the ternary number representation, which is 3^2 + 3^0 + 3^0 = 11, that would be 3 deals. But we could actually buy 12 (1 more than necessary) with 1 less deal, make it 2 deals, with 3^2 + 3^1 = 12 watermelons. So is the editorial solution wrong or am i missing something ?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Wileyne Note that this function is convex Isn't the function concave ?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

In problem-C1, I found attached statement ambiguous

Statement

Which parameter should be minimized first? no of deals or cost

Because as per formula, cost(3^(x+1)) > cost(3*3^x)

Proof

This means if we increase no of deals cost will reduce but if we reduce no of deals cost will increase

  • »
    »
    8 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    The statement, "considering that he will make the least possible number of deals", defines the number of deals explicitly. That is, you need to consider the minimum number of deals in general. From there, minimize the amount that will be paid.

    Note: The minimum number of deals is sum of digits in the base-3 representation of the given number.

»
8 months ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

Why do I get Wrong Answer on test 97 when I submit the author's code (problem G)?

  • »
    »
    8 months ago, hide # ^ |
    Rev. 2  
    Vote: I like it 0 Vote: I do not like it

    .

  • »
    »
    8 months ago, hide # ^ |
    Rev. 2  
    Vote: I like it 0 Vote: I do not like it

    Considering that the base set and modulo in the editorial's solution is fixed, I would guess that test 97 is a hack case.

    Random fact
»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Feels like I’m doing a math olympiad, not a Codeforces contest

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

dumb math

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

great editorial!

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

The pattern of the contest was not up to the mark. Problems A,B,C1 were extremely easy and the gap between C1 and C2 was huge. As a result, both newbies and even many specialists ended up solving till C1. Please try to make the gaps between problems uniform!

»
8 months ago, hide # |
Rev. 3  
Vote: I like it 0 Vote: I do not like it

solved.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

2132D - From 1 to Infinity Can I get an easy explanation or how did we derive that formula used to calculate the sum, if there is any article or any explanation then please tell me.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Hey guys. Can you tell me is my idea for solving C2 correct?

First of all, let's find this observation that: 3^18 > 10^9 and 3^18 is the maximum number lower than $$$10^9$$$. It will help us handle '-1'.

Instead of going from "large to small" I go from "small to large". See the examples below:

Example

Sorry for my bad english

»
8 months ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it
Sol for D
»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

the problem D is so hard that i can't understand ,anyone could help me?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

F is such a great problem!! Loved it,although I have not read the tutorial yet but saw some solutions,I think everyone's doing the same thing as I did.

»
8 months ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

In the editorial for problem D, what do they mean by writing: "We will immediately add to the answer the sum of the first k digits of n", I mean if k is 35 for example, the number at the 35th digit is 22. So then "we will add to the answer the sum of the first 35 digits of 25" ? 25 has only 2 digits, what do they mean by that

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Does someone understand the editorial for problem D and can maybe explain it to me ?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I solve problems in python and in problem B coudnt figure out whats wrong till the end. Turn out after 15-16 digits python dont store float number accurately and thats the only reason for me to get wrong answer.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Why my code gives wrong output for last test case in last three digits for c1

void solve()
{
    ll n,cost=0;
    cin>>n;
    while(n>2){
        ll x=(log(n)/log(3));
        // cout<<x<<" ";
        cost+=pow(3,x+1)+(x*(pow(3,x-1)));
        n-=pow(3,x);
    }
    cost+=n*3;
    cout<<cost<<endl;
    
}
»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

In the From 1 to Infinity how do we prove that when we convert n to a string iterate its of limited size and not of size of order 10^12 or something ?

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

If a unimodal function has a flat top, can the ternary search algorithm be applied on the integer domain only if the flat top occurs at the extremum point? I used to think that if there was a flat top, the ternary search could not be used.

  • »
    »
    8 months ago, hide # ^ |
    Rev. 3  
    Vote: I like it +3 Vote: I do not like it

    It can be applied to that along with a few other forms of unimodal integer functions. You can search a unimodal integer function so long as it has strict inequality on one end and loose inequality on the other. In other words, it must be in one of these forms:

    $$$f(1) \lt f(2) \lt \dots \lt f(k) \geq f(k+1) \geq f(k+2) \geq \dots$$$ $$$f(1) \leq f(2) \leq \dots \leq f(k) \gt f(k+1) \gt f(k+2) \gt \dots$$$ $$$f(1) \gt f(2) \gt \dots \gt f(k) \leq f(k+1) \leq f(k+2) \leq \dots$$$ $$$f(1) \geq f(2) \geq \dots \geq f(k) \lt f(k+1) \lt f(k+2) \lt \dots$$$

    If we were to allow loose inequality on both ends, then getting the same value twice wouldn't tell us where we are relative to the maximum/minimum (whereas allowing it on strictly one end tells us that we are currently still on the same side of the maximum/minimum so long as we are comparing two consecutive spots during the ternary search). An example of an implementation which supports the aforementioned ternary search property can be found on kactl.

»
8 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

In problem E, the writer says "This will be the optimal answer because all the cards taken from array a will be at least as large as all the cards that have not yet been taken from array b , meaning there is no point in making additional swaps of cards from one array to another." Can any explain this? I don't understand.

»
7 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Alright how the hell is this a div 3 competition?