Submission #1271257

#TimeUsernameProblemLanguageResultExecution timeMemory
1271257tuandqStrah (COCI18_strah)C++20
110 / 110
123 ms4392 KiB
#include <bits/stdc++.h> using namespace std ; typedef long long ll ; typedef long double ld ; typedef pair<int, int> pii ; typedef pair<int, long long> pil ; typedef pair<long long, int> pli ; typedef pair<long long, long long> pll ; typedef vector<int> vi ; typedef vector<long long> vll ; #define bitc(n) (__builtin_popcountll(n)) #define clz(n) (__builtin_clzll(n)) #define ctz(n) (__builtin_ctzll(n)) #define lg(n) (63 - __builtin_clzll(n)) #define MASK(k) (1ll << (k)) #define getbit(n, k) ((n) >> (k) & 1) #define flipbit(n, k) ((n) ^ (1ll << (k))) #define ton(n, k) ((n) | (1ll << (k))) #define toff(n, k) ((n) & ~(1ll << (k))) #define fi first #define se second #define mp make_pair #define eb emplace_back #define lwb lower_bound #define upb upper_bound #define sz(x) (int)(x.size()) #define all(x) x.begin(),x.end() #define taskname "input" template<class X, class Y> bool maximize(X &x, const Y &y) {return (x < y ? x = y, true : false) ;} template<class X, class Y> bool minimize(X &x, const Y &y) {return (x > y ? x = y, true : false) ;} template<class X> void remove_dup(vector<X> &ve) { sort(ve.begin(), ve.end()) ; ve.resize(unique(ve.begin(), ve.end()) - ve.begin()) ; } const ll mod = 1e9 + 7 ; const ll INF = 1e18 ; const int inf = 1e9 ; const int N = 2e3 + 5 ; /* Some Peach Tea Is Great ;-; */ /* Author : Tuandq */ int n, m ; char c[N][N] ; namespace sub3 { int h[N], l[N], r[N] ; void solve() { ll res = 0 ; for(int i = 1; i <= n; i ++) { for(int j = 1; j <= m; j ++) { h[j] = (c[i][j] == '.' ? h[j] + 1 : 0) ; } stack<int> s ; s.emplace(0) ; for(int j = 1; j <= m; j ++) { while(!s.empty() && h[s.top()] > h[j]) s.pop() ; l[j] = s.top() ; s.emplace(j) ; } while(!s.empty()) s.pop() ; h[m + 1] = -1 ; s.emplace(m + 1) ; for(int j = m; j > 0; j --) { while(!s.empty() && h[s.top()] >= h[j]) s.pop() ; r[j] = s.top() ; s.emplace(j) ; } for(int j = 1; j <= m; j ++) { int lenL = j - l[j] ; int lenR = r[j] - j ; ll sumH = 1ll * h[j] * (h[j] + 1) >> 1ll ; ll sumL = 1ll * lenL * (lenL + 1) >> 1ll ; ll sumR = 1ll * lenR * (lenR + 1) >> 1ll ; res += 1ll * sumH * (sumL * lenR + sumR * lenL - lenL * lenR) ; // cerr << i << ' ' << j << ' ' << lenL << ' ' << lenR << ' ' << h[j] << ' ' << res << endl ; } } cout << res ; } } signed main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ; if(fopen(taskname".inp", "r")) { freopen(taskname".inp", "r", stdin) ; freopen(taskname".out", "w", stdout) ; } cin >> n >> m ; for(int i = 1; i <= n; i ++) { for(int j = 1; j <= m; j ++) { cin >> c[i][j] ; } } return sub3::solve(), 0 ; }

Compilation message (stderr)

strah.cpp: In function 'int main()':
strah.cpp:97:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |         freopen(taskname".inp", "r", stdin) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
strah.cpp:98:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   98 |         freopen(taskname".out", "w", stdout) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...