Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/*
The implementation of Art Class (IOI 2013) with C++
http://joisino.hatenablog.com/entry/2017/10/05/200000
Copyright (c) 2017 joisino
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
#include <bits/stdc++.h>
#include "artclass.h"
using namespace std;
int lo( long long x ){
int s = 0;
while( x > 0 ){
s++;
x /= 2;
}
return s;
}
vector<long long> vars( int H, int W, int a[500][500], int sz ){
vector<long long> v(0);
for( int i = sz; i < H-sz; i++ ){
for( int j = sz; j < W-sz; j++ ){
int ave = 0;
for( int y = -sz; y <= sz; y++ ){
for( int x = -sz; x <= sz; x++ ){
ave += a[i+y][j+x];
}
}
ave /= (sz*2+1)*(sz*2+1);
long long res = 0;
for( int y = -sz; y <= sz; y++ ){
for( int x = -sz; x <= sz; x++ ){
long long d = ( ave - a[i+y][j+x] );
res += d * d;
}
}
v.push_back( res );
}
}
return v;
}
int style( int H, int W, int R[500][500], int G[500][500], int B[500][500] ){
int a[500][500];
for( int i = 0; i < H; i++ ){
for( int j = 0; j < W; j++ ){
a[i][j] = R[i][j] + G[i][j] + B[i][j];;
}
}
vector<long long> v = vars(H,W,a,1);
sort( v.begin(), v.end() );
long long sum = 0;
for( int i = 0; i < v.size(); i++ ){
sum += v[i];
}
int s = lo( sum );
int t = lo(v[v.size()/2]);
if( s <= 29 ){
return 4;
}
if( t <= 11 ){
return 1;
}
v = vars(H,W,a,32);
sort( v.begin(), v.end() );
int u = lo(v[int(v.size()*0.1)]);
if( u <= 25 ){
return 2;
}
return 3;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.