Submission #425315

# Submission time Handle Problem Language Result Execution time Memory
425315 2021-06-12T21:04:09 Z frodakcin Art Class (IOI13_artclass) C++17
34 / 100
3874 ms 8156 KB
#include "artclass.h"
#include <random>
#include <chrono>
#include <vector>
#include <algorithm>

std::mt19937 rng(std::chrono::high_resolution_clock::now().time_since_epoch().count());

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500])
{
	auto dist=[&](int a, int b, int x, int y)->double
	{
		double d2=0;
		d2 += (R[a][b]-R[x][y])*(R[a][b]-R[x][y]);
		d2 += (G[a][b]-G[x][y])*(G[a][b]-G[x][y]);
		d2 += (B[a][b]-B[x][y])*(B[a][b]-B[x][y]);
		return sqrt(d2);
	};

	auto logistic=[&](double x)->double
	{
		const double x0 = 0;
		const double rt = 0.2;
		return 1/(1+exp((x-x0)*rt));
	};

	// differentiate between 1/4 and 2/3
	double wtdif = 0;
	for(int i=0;i+1<H;++i)
		for(int j=0;j<W;++j)
			wtdif += logistic(dist(i, j, i+1, j));
	wtdif /= (H-1)*W;

	// return (int)(wtdif*10000); // CUT: 1800

	if(wtdif < 0.18)
	{ // styles 2 or 3
		/*
		double green_factor = 0;
		for(int i=0;i<H;++i)
			for(int j=0;j<W;++j)
				green_factor += (double)G[i][j]/(R[i][j]+G[i][j]+B[i][j]+1);
		green_factor /= H*W;
		*/

		std::vector<double> vars;

		int L = ((H+W)/2)/20;
		for(int i=L;i+L<=H;++i)
			for(int j=L;j+L<=W;++j)
			{
				auto var_col = [&](int col[500][500])->double
				{
					double mean = 0;
					for(int u=i-L;u<i+L;++u)
						for(int v=j-L;v<j+L;++v)
							mean += col[u][v];
					mean /= L*L*4;

					double var = 0;
					for(int u=i-L;u<i+L;++u)
						for(int v=j-L;v<j+L;++v)
							var += (col[u][v]-mean)*(col[u][v]-mean);
					var /= L*L*4;
					return var;
				};

				double var_cur=0;
				var_cur += var_col(R);
				var_cur += var_col(G);
				var_cur += var_col(B);
				vars.push_back(var_cur);
			}
		std::sort(vars.begin(), vars.end());

		
		//return (int)(vars[vars.size()/4]);
		//return (int)(green_factor*1000);

		if(vars[vars.size()/4] < 3200)
			return 2;
		else
			return 3;
	}
	else
	{ // styles 1 or 4
		double variance = 0;

		auto var_col = [&](int col[500][500])->double
		{
			double mean = 0;
			for(int u=0;u<H;++u)
				for(int v=0;v<W;++v)
					mean += col[u][v];
			mean /= H*W;

			double var = 0;
			for(int u=0;u<H;++u)
				for(int v=0;v<W;++v)
					var += (col[u][v]-mean)*(col[u][v]-mean);
			var /= H*W;
			return var;
		};

		variance += var_col(R);
		variance += var_col(G);
		variance += var_col(B);
		
		if(variance < 10000)
			return 1;
		else
			return 4;
	}
	return -1;
}
# Verdict Execution time Memory Grader output
1 Incorrect 59 ms 4924 KB Output isn't correct
2 Incorrect 69 ms 5668 KB Output isn't correct
3 Correct 2277 ms 6448 KB Output is correct
4 Correct 1409 ms 5868 KB Output is correct
5 Correct 2619 ms 6908 KB Output is correct
6 Incorrect 47 ms 4512 KB Output isn't correct
7 Incorrect 36 ms 4296 KB Output isn't correct
8 Incorrect 75 ms 5908 KB Output isn't correct
9 Correct 1858 ms 7356 KB Output is correct
10 Incorrect 41 ms 3268 KB Output isn't correct
11 Incorrect 57 ms 4164 KB Output isn't correct
12 Correct 2510 ms 6732 KB Output is correct
13 Correct 2996 ms 7168 KB Output is correct
14 Correct 1087 ms 4288 KB Output is correct
15 Correct 2748 ms 7104 KB Output is correct
16 Incorrect 60 ms 5292 KB Output isn't correct
17 Correct 2718 ms 7448 KB Output is correct
18 Correct 1120 ms 4128 KB Output is correct
19 Incorrect 2223 ms 6432 KB Output isn't correct
20 Incorrect 62 ms 5372 KB Output isn't correct
21 Correct 69 ms 5384 KB Output is correct
22 Correct 2710 ms 7544 KB Output is correct
23 Correct 692 ms 3576 KB Output is correct
24 Correct 72 ms 5764 KB Output is correct
25 Correct 2740 ms 7532 KB Output is correct
26 Incorrect 42 ms 4704 KB Output isn't correct
27 Incorrect 69 ms 5348 KB Output isn't correct
28 Correct 2492 ms 6744 KB Output is correct
29 Correct 2700 ms 7144 KB Output is correct
30 Correct 2605 ms 6828 KB Output is correct
31 Incorrect 3874 ms 8156 KB Output isn't correct
32 Correct 60 ms 5140 KB Output is correct
33 Incorrect 63 ms 5432 KB Output isn't correct
34 Correct 2062 ms 7044 KB Output is correct
35 Correct 2724 ms 7452 KB Output is correct
36 Correct 2673 ms 6740 KB Output is correct
37 Correct 2180 ms 6608 KB Output is correct
38 Incorrect 76 ms 5924 KB Output isn't correct
39 Incorrect 63 ms 5320 KB Output isn't correct
40 Correct 2568 ms 6564 KB Output is correct
41 Correct 53 ms 4980 KB Output is correct
42 Correct 2196 ms 6544 KB Output is correct
43 Incorrect 76 ms 6016 KB Output isn't correct
44 Correct 1687 ms 5116 KB Output is correct
45 Incorrect 82 ms 5856 KB Output isn't correct
46 Correct 81 ms 5188 KB Output is correct
47 Correct 2554 ms 7472 KB Output is correct
48 Incorrect 87 ms 5868 KB Output isn't correct
49 Incorrect 47 ms 4744 KB Output isn't correct
50 Correct 2245 ms 6832 KB Output is correct
51 Correct 76 ms 5188 KB Output is correct
52 Correct 1644 ms 4844 KB Output is correct
53 Incorrect 3816 ms 8072 KB Output isn't correct
54 Correct 67 ms 5372 KB Output is correct
55 Correct 2499 ms 7592 KB Output is correct
56 Correct 1627 ms 5868 KB Output is correct
57 Incorrect 69 ms 5660 KB Output isn't correct
58 Incorrect 78 ms 5672 KB Output isn't correct
59 Incorrect 64 ms 5060 KB Output isn't correct
60 Incorrect 72 ms 5608 KB Output isn't correct
61 Incorrect 69 ms 5388 KB Output isn't correct
62 Correct 61 ms 5140 KB Output is correct
63 Correct 2536 ms 7608 KB Output is correct
64 Correct 3000 ms 7112 KB Output is correct
65 Incorrect 63 ms 4904 KB Output isn't correct
66 Incorrect 55 ms 5156 KB Output isn't correct
67 Correct 1119 ms 4404 KB Output is correct
68 Correct 3065 ms 7136 KB Output is correct
69 Incorrect 19 ms 3628 KB Output isn't correct
70 Correct 2143 ms 7272 KB Output is correct
71 Incorrect 76 ms 6060 KB Output isn't correct
72 Correct 2613 ms 7296 KB Output is correct
73 Correct 2737 ms 6800 KB Output is correct
74 Correct 697 ms 3636 KB Output is correct
75 Correct 2649 ms 6960 KB Output is correct
76 Correct 2988 ms 6980 KB Output is correct
77 Incorrect 75 ms 5788 KB Output isn't correct
78 Correct 2715 ms 6948 KB Output is correct
79 Incorrect 45 ms 4592 KB Output isn't correct
80 Incorrect 74 ms 5468 KB Output isn't correct
81 Incorrect 74 ms 4300 KB Output isn't correct
82 Incorrect 77 ms 5640 KB Output isn't correct
83 Correct 260 ms 1984 KB Output is correct
84 Incorrect 65 ms 5304 KB Output isn't correct
85 Correct 1687 ms 5044 KB Output is correct
86 Correct 2584 ms 7220 KB Output is correct
87 Correct 1769 ms 5012 KB Output is correct
88 Correct 2149 ms 6524 KB Output is correct
89 Correct 77 ms 5928 KB Output is correct
90 Correct 2795 ms 7656 KB Output is correct
91 Correct 2680 ms 7212 KB Output is correct
92 Correct 1789 ms 6272 KB Output is correct
93 Incorrect 50 ms 4840 KB Output isn't correct
94 Incorrect 48 ms 4716 KB Output isn't correct
95 Correct 2655 ms 6736 KB Output is correct
96 Correct 2498 ms 6464 KB Output is correct
97 Correct 1115 ms 4252 KB Output is correct
98 Incorrect 49 ms 4796 KB Output isn't correct
99 Incorrect 66 ms 5060 KB Output isn't correct
100 Correct 2533 ms 6612 KB Output is correct
101 Correct 75 ms 5996 KB Output is correct
102 Correct 736 ms 3768 KB Output is correct