답안 #404349

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
404349 2021-05-14T08:44:33 Z Ruxandra985 Red-blue table (IZhO19_stones) C++14
11 / 100
42 ms 2024 KB
#include <bits/stdc++.h>

using namespace std;
char a[1010][1010];
int f[1010] , ok[1010];
priority_queue <pair <int , int> > h;
int main()
{
    FILE *fin = stdin;
    FILE *fout = stdout;
    int t , n , m , i , j , opt , sol , val , poz;
    fscanf (fin,"%d",&t);
    for (;t;t--){

        fscanf (fin,"%d%d",&n,&m);

        if (n >= m){

            for (i = 1 ; i <= n ; i++){
                for (j = 1 ; j <= m ; j++){
                    a[i][j] = '+';
                }
            }
            opt = m / 2 + 1;
            sol = n;

            for (i = 1 ; i <= n ; i++){
                h.push(make_pair(0 , i));
                f[i] = 0;
            }

            for (i = 1 ; i <= m ; i++){

                /// poti sa scoti n / 2 + 1 elem din h a.i toate < opt??

                for (j = 1 ; j <= n / 2 + 1 ; j++){

                    val = -h.top().first;
                    poz = h.top().second;
                    h.pop();

                    if (val + 1 < opt){
                        ok[j] = poz;
                    }
                    else break;

                }

                if (j > n / 2 + 1){ /// se poate

                    sol++;

                    for (j = 1 ; j <= n / 2 + 1 ; j++){
                        f[ok[j]]++;
                        h.push(make_pair(-f[ok[j]] , ok[j]));
                        a[ok[j]][i] = '-';
                    }

                }


            }


            fprintf (fout,"%d\n" , sol);
            for (i = 1 ; i <= n ; i++){
                for (j = 1 ; j <= m ; j++){
                    fputc(a[i][j] , fout);
                }
                fprintf (fout,"\n");
            }

            while (!h.empty())
                h.pop();

        }
        else {

            for (i = 1 ; i <= n ; i++){
                for (j = 1 ; j <= m ; j++){
                    a[i][j] = '-';
                }
            }

            opt = n / 2 + 1;
            sol = m;

            for (i = 1 ; i <= m ; i++){
                h.push(make_pair(0 , i));
                f[i] = 0;
            }

            for (i = 1 ; i <= n ; i++){

                /// poti sa scoti m / 2 + 1 elem din h a.i toate < opt??

                for (j = 1 ; j <= m / 2 + 1 ; j++){

                    val = -h.top().first;
                    poz = h.top().second;
                    h.pop();

                    if (val + 1 < opt){
                        ok[j] = poz;
                    }
                    else break;

                }

                if (j > m / 2 + 1){ /// se poate

                    sol++;

                    for (j = 1 ; j <= m / 2 + 1 ; j++){
                        f[ok[j]]++;
                        h.push(make_pair(-f[ok[j]] , ok[j]));
                        a[i][ok[j]] = '+';
                    }

                }


            }


            fprintf (fout,"%d\n" , sol);
            for (i = 1 ; i <= n ; i++){
                for (j = 1 ; j <= m ; j++){
                    fputc(a[i][j] , fout);
                }
                fprintf (fout,"\n");
            }
            while (!h.empty())
                h.pop();

        }



    }
    return 0;
}

Compilation message

stones.cpp: In function 'int main()':
stones.cpp:12:12: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |     fscanf (fin,"%d",&t);
      |     ~~~~~~~^~~~~~~~~~~~~
stones.cpp:15:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |         fscanf (fin,"%d%d",&n,&m);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 300 KB in the table A+B is not equal to 5
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 332 KB in the table A+B is not equal to 21
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 300 KB in the table A+B is not equal to 5
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 1308 KB Output is correct
2 Correct 42 ms 1916 KB Output is correct
3 Correct 40 ms 2024 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 40 ms 1460 KB in the table A+B is not equal to 46
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 300 KB in the table A+B is not equal to 5