Submission #651739

# Submission time Handle Problem Language Result Execution time Memory
651739 2022-10-19T23:09:35 Z Lawliet Art Class (IOI13_artclass) C++17
65 / 100
95 ms 25144 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+6>red && green+6>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;
    memset(marc, 0, sizeof(marc));
   int mx = 0;
   for(int i=0;i<l;i++){
       for(int j=0;j<c;j++){
           if(marc[i][j] == 0){
                mx = max(mx, find_comp(i,j));
            //    int sz_comp = find_comp(i, j);
            //    qtd_comp_++;
            //    if(sz_comp>min_sz_comp) qtd_bigcomp_++;
           }
       }
   }

   return mx;
}
 
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)/22);
   min_bigcomp = 1;
   min_bigcomp_group14 = 6;
   //min_qtd_green = ((l*c)/4);
   min_dif = 5;
   min_colors_sum = 350;
   //min_qtd_greencomp = 8;
   min_sz_greencomp = ((l*c)/50);
   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 < 80 )
                    return 1;
            }
        }
        return 4;
   }
  
    min_dif=15;
  
   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:149:8: warning: unused variable 'qtd_comp' [-Wunused-variable]
  149 |    int qtd_comp = aux.second;
      |        ^~~~~~~~
artclass.cpp:168:8: warning: unused variable 'qtd_green' [-Wunused-variable]
  168 |    int qtd_green = do_green_image();
      |        ^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 57 ms 14224 KB Output is correct
2 Correct 60 ms 10944 KB Output is correct
3 Correct 49 ms 11688 KB Output is correct
4 Correct 61 ms 13552 KB Output is correct
5 Correct 43 ms 13012 KB Output is correct
6 Correct 53 ms 8540 KB Output is correct
7 Correct 56 ms 16204 KB Output is correct
8 Incorrect 45 ms 7116 KB Output isn't correct
9 Incorrect 55 ms 17308 KB Output isn't correct
10 Incorrect 55 ms 11952 KB Output isn't correct
11 Correct 55 ms 14540 KB Output is correct
12 Correct 15 ms 4948 KB Output is correct
13 Correct 28 ms 5604 KB Output is correct
14 Incorrect 17 ms 9216 KB Output isn't correct
15 Correct 73 ms 7448 KB Output is correct
16 Incorrect 39 ms 11060 KB Output isn't correct
17 Correct 53 ms 18000 KB Output is correct
18 Incorrect 58 ms 7840 KB Output isn't correct
19 Correct 62 ms 10792 KB Output is correct
20 Incorrect 54 ms 20172 KB Output isn't correct
21 Correct 61 ms 7080 KB Output is correct
22 Correct 60 ms 7072 KB Output is correct
23 Correct 48 ms 11856 KB Output is correct
24 Correct 63 ms 13060 KB Output is correct
25 Incorrect 54 ms 19652 KB Output isn't correct
26 Correct 34 ms 6052 KB Output is correct
27 Correct 56 ms 9612 KB Output is correct
28 Incorrect 44 ms 11856 KB Output isn't correct
29 Correct 34 ms 9632 KB Output is correct
30 Correct 77 ms 11280 KB Output is correct
31 Correct 57 ms 10516 KB Output is correct
32 Correct 64 ms 8524 KB Output is correct
33 Correct 43 ms 6488 KB Output is correct
34 Correct 66 ms 7548 KB Output is correct
35 Correct 57 ms 9168 KB Output is correct
36 Incorrect 39 ms 11204 KB Output isn't correct
37 Incorrect 52 ms 7092 KB Output isn't correct
38 Correct 56 ms 14792 KB Output is correct
39 Correct 56 ms 7996 KB Output is correct
40 Correct 57 ms 9412 KB Output is correct
41 Correct 58 ms 11048 KB Output is correct
42 Incorrect 49 ms 11044 KB Output isn't correct
43 Correct 50 ms 6812 KB Output is correct
44 Correct 57 ms 9700 KB Output is correct
45 Correct 35 ms 10696 KB Output is correct
46 Correct 37 ms 7116 KB Output is correct
47 Correct 52 ms 7436 KB Output is correct
48 Correct 75 ms 7264 KB Output is correct
49 Incorrect 68 ms 7756 KB Output isn't correct
50 Correct 53 ms 7316 KB Output is correct
51 Correct 55 ms 8244 KB Output is correct
52 Correct 58 ms 14848 KB Output is correct
53 Incorrect 70 ms 8396 KB Output isn't correct
54 Incorrect 49 ms 7948 KB Output isn't correct
55 Correct 50 ms 13544 KB Output is correct
56 Incorrect 72 ms 25144 KB Output isn't correct
57 Correct 58 ms 10020 KB Output is correct
58 Correct 49 ms 6756 KB Output is correct
59 Correct 45 ms 7576 KB Output is correct
60 Correct 34 ms 5984 KB Output is correct
61 Correct 61 ms 12276 KB Output is correct
62 Incorrect 63 ms 8512 KB Output isn't correct
63 Correct 28 ms 5604 KB Output is correct
64 Incorrect 64 ms 23800 KB Output isn't correct
65 Incorrect 95 ms 22600 KB Output isn't correct
66 Correct 73 ms 14152 KB Output is correct
67 Correct 47 ms 10468 KB Output is correct
68 Correct 57 ms 8636 KB Output is correct
69 Incorrect 56 ms 6852 KB Output isn't correct
70 Correct 56 ms 11080 KB Output is correct
71 Incorrect 57 ms 8608 KB Output isn't correct
72 Correct 58 ms 11408 KB Output is correct
73 Correct 60 ms 12148 KB Output is correct
74 Incorrect 83 ms 9224 KB Output isn't correct
75 Correct 58 ms 12148 KB Output is correct
76 Correct 52 ms 7548 KB Output is correct
77 Correct 77 ms 10064 KB Output is correct
78 Correct 59 ms 11188 KB Output is correct
79 Incorrect 69 ms 12136 KB Output isn't correct
80 Correct 41 ms 6220 KB Output is correct
81 Correct 40 ms 7512 KB Output is correct
82 Correct 51 ms 8268 KB Output is correct
83 Correct 59 ms 8176 KB Output is correct
84 Correct 45 ms 6320 KB Output is correct
85 Correct 59 ms 15784 KB Output is correct
86 Correct 50 ms 8100 KB Output is correct
87 Correct 38 ms 8224 KB Output is correct
88 Correct 30 ms 5752 KB Output is correct
89 Correct 58 ms 6900 KB Output is correct
90 Correct 58 ms 7444 KB Output is correct
91 Incorrect 74 ms 14924 KB Output isn't correct
92 Correct 47 ms 10284 KB Output is correct
93 Incorrect 39 ms 6656 KB Output isn't correct
94 Correct 33 ms 5984 KB Output is correct
95 Correct 50 ms 11028 KB Output is correct
96 Correct 29 ms 9748 KB Output is correct
97 Incorrect 48 ms 7632 KB Output isn't correct
98 Correct 72 ms 9288 KB Output is correct
99 Correct 57 ms 8772 KB Output is correct
100 Correct 51 ms 14088 KB Output is correct
101 Correct 36 ms 7336 KB Output is correct
102 Correct 60 ms 11332 KB Output is correct