Submission #792159

# Submission time Handle Problem Language Result Execution time Memory
792159 2023-07-24T16:39:16 Z mousebeaver Carnival Tickets (IOI20_tickets) C++14
41 / 100
446 ms 73016 KB
#define ll long long
#define pll pair<ll, ll>
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;

long long find_maximum(int k, vector<vector<int>> x)
{
	ll n = x.size();
	ll m = x[0].size();

	if(m == 1)
	{
		vector<vector<int>> output(n, vector<int> (1, 0));
		allocate_tickets(output);
		vector<ll> a(n);
		for(ll i = 0; i < n; i++)
		{
			a[i] = x[i][0];
		}
		sort(a.begin(), a.end());
		ll ans = 0;
		ll add = 0;
		for(ll i = n/2; i >= 0; i--)
		{
			add = a[n/2] - a[i];
			ans += add;
		}
		for(ll i = n/2+1; i < n; i++)
		{
			add = a[i] - a[n/2];
			ans += add;
		}
		return ans;
	}
	if(k == 1)
	{
		ll ans = -1;
		vector<vector<int>> output(n, vector<int> (m, -1));

		for(ll i = 0; i < n; i++)
		{
			ll median = x[i][m-1];
			ll sum = 0;
			ll below = 0; //Counter for the ones that can not go high enough
			vector<pll> downfall(0); //What is won by going down
			vector<ll> bottom(0);

			for(ll j = 0; j < n; j++)
			{
				if(i != j)
				{
					if(x[j][m-1] >= median)
					{
						//May go above
						sum += x[j][m-1] - median;
						if(x[j][0] <= median)
						{
							//May go below
							downfall.push_back({(median-x[j][0]) - (x[j][m-1]-median), j});
						}
					}
					else
					{
						//Has to go below
						below++;
						bottom.push_back(j);
						sum += median - x[j][0];
					}
				}
			}

			if(below <= n/2 && below+(int) downfall.size() >= n/2)
			{
				//Being median is possible
				sort(downfall.begin(), downfall.end());
				reverse(downfall.begin(), downfall.end());
				for(ll j = below+1; j <= n/2; j++)
				{
					sum += downfall[j-below-1].first;
					bottom.push_back(downfall[j-below-1].second);
				}

				if(sum > ans)
				{
					ans = sum;
					for(int j = 0; j < n; j++)
					{
						output[j][0] = -1;
						output[j][m-1] = 0;
					}
					for(int j : bottom)
					{
						output[j][0] = 0;
						output[j][m-1] = -1;
					}
				}
			}			
		}

		allocate_tickets(output);
		return ans;
	}

	vector<ll> zcount(n, 0);
	for(ll i = 0; i < n; i++)
	{
		for(ll j = 0; j < m; j++)
		{
			zcount[i] += (x[i][j] == 0);
		}
	}
	vector<ll> zind(n, 0);
	vector<ll> oind(n, 0); //Index of first zero/one

	vector<vector<int>> output(n, vector<int> (m, -1));
	ll ans = 0;

	for(ll i = 0; i < k; i++)
	{
		vector<pll> zsort(n);
		for(ll j = 0; j < n; j++)
		{
			zsort[j] = {zcount[j], j};
		}
		sort(zsort.begin(), zsort.end());

		vector<bool> big(n, true);
		for(ll j = n/2; j < n; j++)
		{
			big[zsort[j].second] = false;
		}

		ll counter = 0;
		for(ll j = 0; j < n; j++)
		{
			if((big[j] && zcount[j] < m-i) || (!big[j] && zcount[j] == 0))
			{
				//Give a one
				while(x[j][oind[j]] != 1)
				{
					oind[j]++;
				}
				output[j][oind[j]] = i;
				oind[j]++;
				counter++;
			}
			else
			{
				//Give a zero
				while(x[j][zind[j]] != 0)
				{
					zind[j]++;
				}
				output[j][zind[j]] = i;
				zind[j]++;
				zcount[j]--;
			}
		}
		ans += min(counter, n-counter);
	}

	allocate_tickets(output);
	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 1 ms 596 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 2 ms 436 KB Output is correct
5 Correct 19 ms 3168 KB Output is correct
6 Correct 446 ms 73016 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 2 ms 340 KB Output is correct
5 Correct 16 ms 2488 KB Output is correct
6 Correct 374 ms 54772 KB Output is correct
7 Correct 386 ms 55144 KB Output is correct
8 Correct 2 ms 468 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 300 KB Output is correct
12 Correct 4 ms 852 KB Output is correct
13 Correct 13 ms 2208 KB Output is correct
14 Correct 13 ms 2132 KB Output is correct
15 Correct 416 ms 55816 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 1 ms 596 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 2 ms 436 KB Output is correct
11 Correct 19 ms 3168 KB Output is correct
12 Correct 446 ms 73016 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 2 ms 340 KB Output is correct
17 Correct 16 ms 2488 KB Output is correct
18 Correct 374 ms 54772 KB Output is correct
19 Correct 386 ms 55144 KB Output is correct
20 Correct 2 ms 468 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 300 KB Output is correct
24 Correct 4 ms 852 KB Output is correct
25 Correct 13 ms 2208 KB Output is correct
26 Correct 13 ms 2132 KB Output is correct
27 Correct 416 ms 55816 KB Output is correct
28 Runtime error 1 ms 340 KB Execution killed with signal 11
29 Halted 0 ms 0 KB -