Submission #110433

#TimeUsernameProblemLanguageResultExecution timeMemory
110433Breno_XDBitaro the Brave (JOI19_ho_t1)C++14
0 / 100
10 ms512 KiB
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second

typedef pair<int,int> pii;

const int MAXN = 3420;
int N,M, ans;
pii J[MAXN], O[MAXN], I[MAXN];
int oeO[MAXN], oeI[MAXN];
int contj, conto, conti;
char letra;

int main(){

    //Inicializo com -1, indicando que não tem como chegar lá
    memset(oeO, -1, sizeof(oeO));
    memset(oeI, -1, sizeof(oeI));

    //leitura
    scanf("%d%d", &N, &M);
    for(int i=1; i<=N; i++){
        for(int j=1; j<=M; j++){
            cin >> letra;
            if(letra == 'J'){
                J[++contj] = {i,j};
            }
            if(letra == 'O'){
                O[++conto] = {i,j};
                if(oeO[i]==-1) oeO[i] = conto;
            }
            if(letra == 'I'){
                I[++conti] = {j,i};
            }
        }
    }

    //Ordeno o vetor I
    sort(I+1, I+conti+1); //Ordena em ordem crescente

    for(int top=1; top<=MAXN; top++){
        int i = I[top].x;
        if(oeI[i]==-1) oeI[i] = top;
    }

    for(int ind=1; ind<=contj; ind++){ //Indice que percorre J

        int i = J[ind].x; int j = J[ind].y;
        if(oeO[i]>=1){
            for(int ini = oeO[i]; O[ini].x==i; ini++){

                int l = O[ini].y;

                if(j<l){ //Se for um valor possível, continuo a buscar
                    if(oeI[j]>=1){
                        for(int comeco = oeI[j]; I[comeco].x==j; comeco++){
                            int k = I[comeco].y;

                            if(i<k){
                                ans++;
                            }
                        }
                    }
                }
                //Caso contrário eu dessprezo, pois não é uma possibilidade
            }
        }
    }

    cout << ans << endl;
    return 0;
}

Compilation message (stderr)

joi2019_ho_t1.cpp: In function 'int main()':
joi2019_ho_t1.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &N, &M);
     ~~~~~^~~~~~~~~~~~~~~~
joi2019_ho_t1.cpp:43:13: warning: iteration 3419 invokes undefined behavior [-Waggressive-loop-optimizations]
         int i = I[top].x;
             ^
joi2019_ho_t1.cpp:42:23: note: within this loop
     for(int top=1; top<=MAXN; top++){
                    ~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...