제출 #1173815

#제출 시각아이디문제언어결과실행 시간메모리
1173815manuelalejandroBitaro the Brave (JOI19_ho_t1)C++20
100 / 100
180 ms161304 KiB
#include <bits/extc++.h>

#define int long long 
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define tam(x)  (int)(x).size()
#define endl '\n'
#define sd second
#define fs first
#define maxs(x,y) (x = max(x,y))
#define mins(x,y) (x = min(x,y))
#define optmizar_io  ios_base::sync_with_stdio(0); cin.tie(0);
#define Setpre(n) cout << fixed <<setprecision(n)
#define dbg(x) for(auto y: x) cout << y <<' '; cout << endl;
#define dbg1(x) for(auto y: x) cout << y.first <<' '<< y.second << endl;
#define dbg2(v) for(auto x: v) cout << x.a<< ' '<< x.b <<' '<< x.c << endl;

const int MAX = 501;
const int INF = 1e9;
const int Mod = 1e9+7;
const int zero = 0;
const double eps = 1e-6;
const double PI=acos(-1.0);
const int mox[8] ={-1,1,0,0,-1,-1,1,1};
const int moy[8] ={0,0,-1,1,-1,1,-1,1};

using namespace std;
using namespace __gnu_pbds;

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pi;
typedef vector<bool> vbol;
typedef array<int, 3> arr;

template <typename T>
using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;


void cases(string s){
#ifndef ONLINE_JUDGE
    if(tam(s) == 0) s = "1"; 
    string a = s + ".in";
    string b = s + ".out";
    freopen(a.c_str(), "r", stdin);
    freopen(b.c_str(), "w",  stdout);
#endif
}

int n, m; 

struct Pref2D
{
    int filas, columnas;
    vvi acumulativa;

    Pref2D(int f, int c) : filas(f), columnas(c), acumulativa(f + 10, std::vector<int>(c + 10, 0)) {}

    void construir(const vector<string> grid, char asd) {
        for (int i = 1; i <= filas; i++) {
            for (int j = 1; j <= columnas; j++) {
                acumulativa[i][j] = (grid[i - 1][j - 1] == asd) +
                                    acumulativa[i - 1][j] +
                                    acumulativa[i][j - 1] -
                                    acumulativa[i - 1][j - 1];
            }
        }
    }

    int suma(int x1, int y1, int x2, int y2) {
        return acumulativa[x2][y2] -
               acumulativa[x1 - 1][y2] -
               acumulativa[x2][y1 - 1] +
               acumulativa[x1 - 1][y1 - 1];
    }
};


void _1()
{
    cin >> n >> m;
    vector<string> v(n);
    for(int i = 0; i < n; i++) cin >> v[i];

    Pref2D a(n, m), b(n, m);
    a.construir(v, 'I');
    b.construir(v, 'O');

    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            if(v[i - 1][j - 1] == 'J') 
            {   
               
                int a1 = b.suma(i, j, i, m),
                    b1 = a.suma(i, j, n, j);
                ans += a1 * b1;
            }
        }
    }
    // for(int i = 1; i <= n; i++)
    // {
    //     for(int j = 1; j <= m; j++) cout << b.acumulativa[i][j] << " ";
    //     cout << endl;
    // }
    cout << ans << endl;
    
}


    

int32_t main() {
    optmizar_io 
    // cases("");

    //start:  
    //end: 
    //tags: 
    //difficulty:
    //comment: 
    
    int T = 1; //cin >> T;
    while(T--)
        _1();


    return 0;
}


컴파일 시 표준 에러 (stderr) 메시지

joi2019_ho_t1.cpp: In function 'void cases(std::string)':
joi2019_ho_t1.cpp:46:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |     freopen(a.c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
joi2019_ho_t1.cpp:47:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |     freopen(b.c_str(), "w",  stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...