Submission #651736

# Submission time Handle Problem Language Result Execution time Memory
651736 2022-10-19T22:52:23 Z Lawliet Art Class (IOI13_artclass) C++17
47 / 100
68 ms 22132 KB
#include "artclass.h"
#include <bits/stdc++.h>
// #include <iostream>
// #include <vector>
 
using namespace std;
 
int l, c;
 
int min_sz_comp;
int min_bigcomp;
int min_bigcomp_group14;
int min_qtd_green;
int min_dif;
int min_colors_sum;
int min_qtd_greencomp;
int min_sz_greencomp;
 
struct pixel{
   int red, green, blue;
   pixel(int r = 0, int g = 0, int b = 0){
       red = r;
       green = g;
       blue = b;
   }
  
   bool operator == (pixel b){
       int red_dif = abs((*this).red - b.red);
       int green_dif = abs((*this).green - b.green);
       int blue_dif = abs((*this).blue - b.blue);
       return (red_dif<=min_dif && green_dif<=min_dif && blue_dif<=min_dif);
   }
  
   bool isGreen(){
       int sum = red + green + blue;
       return ((green>red && green>blue) && sum<min_colors_sum);
   }
};
 
pixel image[510][510];
bool green_image[510][510];
int marc[510][510];
 
int dl[] = {-1, 0, 1, 0};
int dc[] = {0, 1, 0, -1};
 
int find_comp(int li, int ci){
   int qtd_pixel = 1;
   marc[li][ci] = 1;
   for(int i=0;i<4;i++){
       int vizl = li + dl[i];
       int vizc = ci + dc[i];
       if(vizl<0 || vizl>l-1) continue;
       if(vizc<0 || vizc>c-1) continue;
       if(marc[vizl][vizc] == 1) continue;
       if(image[vizl][vizc] == image[li][ci]) qtd_pixel += find_comp(vizl, vizc);
   }
   return qtd_pixel;
}
 
pair<int, int> find_bigcomp(){
   memset(marc, 0, sizeof(marc));
   int qtd_bigcomp_ = 0;
   int qtd_comp_ = 0;
   for(int i=0;i<l;i++){
       for(int j=0;j<c;j++){
           if(marc[i][j] == 0){
               int sz_comp = find_comp(i, j);
               qtd_comp_++;
               if(sz_comp>min_sz_comp) qtd_bigcomp_++;
           }
       }
   }
   return {qtd_bigcomp_, qtd_comp_};
}
 
int do_green_image(){
   int qtd_green_ = 0;
   for(int i=0;i<l;i++){
       for(int j=0;j<c;j++){
           green_image[i][j] = image[i][j].isGreen();
           qtd_green_ += green_image[i][j];
       }
   }
   return qtd_green_;
}
 
int marc_greencomp(int li, int ci){
   int sz_greencomp = 1;
   marc[li][ci] = 1;
   for(int i=0;i<4;i++){
       int vizl = li + dl[i];
       int vizc = ci + dc[i];
       if(vizl<0 || vizl>l-1) continue;
       if(vizc<0 || vizc>c-1) continue;
       if(marc[vizl][vizc] == 1) continue;
       if(green_image[vizl][vizc]) sz_greencomp += marc_greencomp(vizl, vizc);
   }
   return sz_greencomp;
}
 
int find_greencomp(){
   memset(marc, 0, sizeof(marc));
   int max_sz_greencomp = 0;
   int qtd_greencomp_ = 0;
   for(int i=0;i<l;i++){
       for(int j=0;j<c;j++){
           if(marc[i][j] == 0 && green_image[i][j]){
               max_sz_greencomp = max(max_sz_greencomp, marc_greencomp(i, j));
               qtd_greencomp_++;
           }
       }
   }
   return max_sz_greencomp;
}
 
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
   l = H;
   c = W;
   min_sz_comp = ((l*c)/18);
   min_bigcomp = 1;
   min_bigcomp_group14 = 6;
   //min_qtd_green = ((l*c)/4);
   min_dif = 5;
   min_colors_sum = 300;
   //min_qtd_greencomp = 8;
   min_sz_greencomp = ((l*c)/15);
   for(int i=0;i<l;i++){
       for(int j=0;j<c;j++){
           image[i][j] = pixel(R[i][j], G[i][j], B[i][j]);
       }
   }
   pair<int, int> aux = find_bigcomp();
   int qtd_bigcomp = aux.first;
   int qtd_comp = aux.second;

//    cout << qtd_bigcomp << endl;
 
   if(qtd_bigcomp>min_bigcomp){
        for(int i = 0 ; i < l ; i++)
        {
            for(int j = 0 ; j < c ; j++)
            {
                int sum = R[i][j] + G[i][j] + B[i][j];
                if( sum < 120 )
                    return 1;
            }
        }
        return 4;
   }
  
  
   int qtd_green = do_green_image();
   /*if(qtd_green<min_qtd_green){
       return 3;
   }*/
  
   int max_sz_greencomp = find_greencomp();
   if(max_sz_greencomp>min_sz_greencomp) return 2;
   else return 3;
   /*if(qtd_greencomp<min_qtd_greencomp) return 2;
   else return 3;*/
  
}
 
// int r[500][500], g[500][500], b[500][500];
 
// int main()
// {
//    int n, m;
//    cin >> n >> m;
 
//    for(int i = 0 ; i < n ; i++)
//        for(int j = 0 ; j < m ; j++)
//            cin >> r[i][j] >> g[i][j] >> b[i][j];
 
//    cout << style(n, m, r, g, b) << endl;
// }

Compilation message

artclass.cpp: In function 'int style(int, int, int (*)[500], int (*)[500], int (*)[500])':
artclass.cpp:135:8: warning: unused variable 'qtd_comp' [-Wunused-variable]
  135 |    int qtd_comp = aux.second;
      |        ^~~~~~~~
artclass.cpp:153:8: warning: unused variable 'qtd_green' [-Wunused-variable]
  153 |    int qtd_green = do_green_image();
      |        ^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 13 ms 4948 KB Output is correct
2 Correct 43 ms 6688 KB Output is correct
3 Incorrect 68 ms 14920 KB Output isn't correct
4 Incorrect 50 ms 7804 KB Output isn't correct
5 Correct 48 ms 6604 KB Output is correct
6 Correct 44 ms 10184 KB Output is correct
7 Incorrect 43 ms 13732 KB Output isn't correct
8 Correct 52 ms 11708 KB Output is correct
9 Incorrect 55 ms 7784 KB Output isn't correct
10 Correct 60 ms 11084 KB Output is correct
11 Correct 58 ms 11468 KB Output is correct
12 Incorrect 50 ms 7080 KB Output isn't correct
13 Incorrect 50 ms 6732 KB Output isn't correct
14 Correct 26 ms 5716 KB Output is correct
15 Correct 44 ms 6716 KB Output is correct
16 Incorrect 50 ms 12136 KB Output isn't correct
17 Incorrect 53 ms 21440 KB Output isn't correct
18 Correct 51 ms 11948 KB Output is correct
19 Correct 49 ms 7588 KB Output is correct
20 Correct 39 ms 7596 KB Output is correct
21 Correct 30 ms 5888 KB Output is correct
22 Correct 52 ms 7480 KB Output is correct
23 Correct 60 ms 18024 KB Output is correct
24 Incorrect 58 ms 8304 KB Output isn't correct
25 Correct 43 ms 13652 KB Output is correct
26 Correct 54 ms 10164 KB Output is correct
27 Correct 52 ms 8080 KB Output is correct
28 Correct 43 ms 11880 KB Output is correct
29 Incorrect 59 ms 18360 KB Output isn't correct
30 Correct 29 ms 5916 KB Output is correct
31 Correct 33 ms 7012 KB Output is correct
32 Correct 60 ms 11060 KB Output is correct
33 Correct 28 ms 5664 KB Output is correct
34 Correct 49 ms 14100 KB Output is correct
35 Correct 52 ms 9108 KB Output is correct
36 Correct 34 ms 7500 KB Output is correct
37 Correct 58 ms 12108 KB Output is correct
38 Correct 53 ms 8524 KB Output is correct
39 Correct 35 ms 9556 KB Output is correct
40 Incorrect 64 ms 22132 KB Output isn't correct
41 Correct 48 ms 7668 KB Output is correct
42 Correct 57 ms 9600 KB Output is correct
43 Correct 56 ms 8140 KB Output is correct
44 Correct 48 ms 10444 KB Output is correct
45 Correct 49 ms 8696 KB Output is correct
46 Correct 49 ms 7500 KB Output is correct
47 Correct 55 ms 10904 KB Output is correct
48 Incorrect 39 ms 10988 KB Output isn't correct
49 Correct 36 ms 6336 KB Output is correct
50 Incorrect 49 ms 17972 KB Output isn't correct
51 Correct 53 ms 11832 KB Output is correct
52 Incorrect 48 ms 14540 KB Output isn't correct
53 Correct 61 ms 11360 KB Output is correct
54 Correct 38 ms 8220 KB Output is correct
55 Incorrect 50 ms 8028 KB Output isn't correct
56 Incorrect 52 ms 7392 KB Output isn't correct
57 Correct 45 ms 7220 KB Output is correct
58 Incorrect 60 ms 7628 KB Output isn't correct
59 Incorrect 49 ms 9072 KB Output isn't correct
60 Incorrect 49 ms 7244 KB Output isn't correct
61 Correct 42 ms 8520 KB Output is correct
62 Correct 58 ms 10524 KB Output is correct
63 Incorrect 52 ms 7244 KB Output isn't correct
64 Correct 52 ms 8848 KB Output is correct
65 Correct 48 ms 6916 KB Output is correct
66 Incorrect 43 ms 6988 KB Output isn't correct
67 Correct 39 ms 6412 KB Output is correct
68 Correct 25 ms 5716 KB Output is correct
69 Correct 45 ms 7440 KB Output is correct
70 Correct 54 ms 7296 KB Output is correct
71 Correct 57 ms 8528 KB Output is correct
72 Incorrect 46 ms 7064 KB Output isn't correct
73 Incorrect 56 ms 19660 KB Output isn't correct
74 Correct 58 ms 11920 KB Output is correct
75 Correct 35 ms 10576 KB Output is correct
76 Correct 60 ms 11304 KB Output is correct
77 Correct 40 ms 13048 KB Output is correct
78 Correct 30 ms 6016 KB Output is correct
79 Correct 49 ms 6884 KB Output is correct
80 Incorrect 45 ms 7052 KB Output isn't correct
81 Correct 40 ms 7520 KB Output is correct
82 Correct 35 ms 7924 KB Output is correct
83 Incorrect 47 ms 7168 KB Output isn't correct
84 Incorrect 50 ms 11084 KB Output isn't correct
85 Incorrect 59 ms 8240 KB Output isn't correct
86 Incorrect 16 ms 9244 KB Output isn't correct
87 Correct 40 ms 7552 KB Output is correct
88 Correct 54 ms 7056 KB Output is correct
89 Incorrect 57 ms 7524 KB Output isn't correct
90 Incorrect 57 ms 11884 KB Output isn't correct
91 Incorrect 28 ms 9824 KB Output isn't correct
92 Correct 49 ms 8372 KB Output is correct
93 Correct 47 ms 7016 KB Output is correct
94 Incorrect 54 ms 16200 KB Output isn't correct
95 Correct 52 ms 8240 KB Output is correct
96 Correct 36 ms 6212 KB Output is correct
97 Incorrect 44 ms 11808 KB Output isn't correct
98 Correct 56 ms 13964 KB Output is correct
99 Correct 44 ms 6728 KB Output is correct
100 Correct 46 ms 7568 KB Output is correct
101 Correct 56 ms 14720 KB Output is correct
102 Incorrect 39 ms 11180 KB Output isn't correct