DMOJ · dmopc20c2p1

DMOPC '20 Contest 2 P1 - Laugh Graphs

This C++ solution uses string processing for DMOJ dmopc20c2p1 DMOPC '20 Contest 2 P1 - Laugh Graphs. Read the reasoning, inspect the code, or try your own test case below.

dmopc20c2p1Graphs & treesString processingC++50 lines
Solution125of 248
Open official problem ↗ Download C++ file ↓ Search the library → Open full Code Lab ↗ Report an issue ↗

Approach

String processing

Laugh Graphs ASCII graph output matches the construction.

Graphs & trees

Problem and code

Useful links.

Written by benbenyaojifen. Try the problem first, then compare your approach with the code.

Open official problem ↗View exact source file ↗
Implementation

laugh_graphs.cpp

C++

    #include <bits/stdc++.h>
     
    using namespace std;
     
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        int n; 
        cin >> n;
        string s; 
        cin >> s;
        unordered_map<int, vector<pair<int,char>>> rows;
        int r = 0, c = 0;
        int minR = 0, maxR = 0, maxC = 0;
        auto add = [&](int row, int col, char ch){
            rows[row].push_back({col, ch});
            maxC = max(maxC, col);
        };
        for(char p : s) {
            if(p == '^'){
                add(r, c, '/');    
                c++; r--;      
            } else if(p == 'v'){
                r++;            
                add(r, c, '\\');   
                c++;              
            } else {        
                add(r, c, '_');
                c++;
            }
            minR = min(minR, r);
            maxR = max(maxR, r);
        }
        for (int row = minR; row <= maxR; row++){
            auto &vec = rows[row];
            if (vec.empty()) continue;
            string line;
            int cur = 0;
            for (auto [col, ch] : vec){
                line.append(col - cur, '.');
                line.push_back(ch);
                cur = col + 1;
            }
            line.append(n - line.size(), '.'); 
            cout << line << '\n';
        }
        
        return 0;
    }
     
        

Did this explanation save you time? I'm a Grade 11 student building this free library to make difficult algorithms easier to understand.

Buy me a coffee ↗Keep studying →

Test this problem

Run your code here.

Paste your code, run a test case, compare the output, or trace selected values.

Full trace, comparison & stress testing ↗
StatusReady
Output
No run yet.
Diagnostics
No diagnostics yet.

Each run is isolated and has strict limits. Passing one test does not guarantee the judge will accept the solution.