这篇文章上次修改于 247 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
        
            Atcoder abc394
A
code
#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin >> s;
    int n = s.size();
    for(int i = 0; i < n; i++){
        if(s[i] == '2'){
            cout << 2 ;
        }
    }
    return 0;
}
B
code
#include <bits/stdc++.h>
using namespace std;
int main(){
    
    int n;
    cin >> n;
    
    vector<string> s(n);
    
    for(int i = 0; i < n; i++){
        cin >> s[i];
    }
    
    vector<pair<string,int>> a;
    
    for(int i = 0; i < n; i++){
        a.pushback(makepair(s[i],s[i].size()));
    }
    
    
    
    
    
    sort(a.begin(), a.end(), [](pair<string, int> x, pair<string, int> y)
         { return x.**second** < y.**second**; });
    
    for(int i = 0; i < n; i++){
        cout << a[i].**first**;
    }
    return 0;
}
C
<u>Debug</u>
code
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    vector<char> chars(s.begin(), s.end());
    bool changed = true;
    while (changed)
    {
        changed = false;
        vector<char> next = chars;
        for (int i = 0; i < chars.size() - 1; i++)
        {
            if (next[i] == 'W' && next[i + 1] == 'A')
            {
                next[i] = 'A';
                next[i + 1] = 'C';
                changed = true;
                i++; 
            }
        }
        chars = next;
    }
    for (char c : chars)
    {
        cout << c;
    }
    cout << endl;
    return 0;
}
D
code
#include <bits/stdc++.h>
using namespace std;
int bracketmatch(string &s1, string &s2)
{
    if (s1 == "(" && s2 == ")")
    {
        return 1;
    }
    else if (s1 == "[" && s2 == "]")
    {
        return 1;
    }
    else if (s1 == "{" && s2 == "}")
    {
        return 1;
    }
    return 0;
}
int main()
{
    string bracket;
    cin >> bracket;
    stack<string> bracketstack;
    for (int i = 0; i < bracket.size(); i++)
    {
        string current(1, bracket[i]); 
        if (current == "(" || current == "[" || current == "{")
        {
            bracketstack.push(current);
        }
        else if (current == ")" || current == "]" || current == "}")
        {
            if (bracketstack.empty())
            {
                cout << "No" << endl;
                return 0;
            }
            if (bracketmatch(bracketstack.top(), current))
            {
                bracketstack.pop();
            }
            else
            {
                cout << "No" << endl;
                return 0;
            }
        }
    }
    
    if (!bracketstack.empty())
    {
        cout << "No" << endl;
    }
    else
    {
        cout << "Yes" << endl;
    }
    return 0;
}
E
code
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
using namespace std;
int inf = 1000000010;
int main()
{
    
    int n;
    cin >> n;
    
    vector<vector<char>> c(n, vector<char>(n));
    rep(i, n) rep(j, n) cin >> c[i][j];
  
    
    vector<vector<int>> a(n, vector<int>(n, inf));
    
    queue<pair<int, int>> que;
  
    
    rep(i, n)
    {
        que.push({i, i});
        a[i][i] = 0;
    }
  
    
    rep(i, n) rep(j, n)
    {
        if (i == j or c[i][j] == '-')
            continue;
        que.push({i, j});
        a[i][j] = 1;
    }
  
    
    while (!que.empty()) 
    {
        auto q = que.front(); 
        que.pop(); 
        int i = q.**first**, j = q.**second**; 
      
        
        rep(k, n) rep(l, n) 
        {
            
            
            
            
            
            if (c[k][i] != '-' && c[j][l] != '-' && c[k][i] == c[j][l] && a[k][l] == inf)
            {
                
                
                a[k][l] = a[i][j] + 2;
                que.push({k, l}); 
            }
        }
    }
  
    
    rep(i, n)
    {
        rep(j, n)
        {
            
            cout << (a[i][j] == inf ? -1 : a[i][j]) << " \n"[j == n - 1];
        }
    }
}
F
<u>Alkane</u>
code
#include <bits/stdc++.h> 
using namespace std; 
#define mp makepair 
#define pb pushback 
#define fi first 
#define se second 
#define li long long 
#define pii pair<int, int> 
#define vi vector<int> 
#define forn(i, n) for (int i = 0; i < (int)n; i++) 
#define fore(i, b, e) for (int i = (int)b; i <= (int)e; i++) 
#define all(x) (x).begin(), (x).end() 
int ans = 0; 
vector<vi> edges; 
vi f; 
void dfs(int v, int p) 
{
    for (int u : edges[v]) 
    {
        if (u != p) 
        {
            dfs(u, v); 
        }
    }
    f[v] = 1; 
    if (edges[v].size() >= 4) 
    {
        vi children; 
        for (int u : edges[v]) 
        {
            if (u != p) 
            {
                children.pb(f[u]); 
            }
            else
            {
                children.pb(1); 
            }
        }
        sort(all(children), greater<int>()); 
        forn(j, 3) 
        {
            f[v] += children[j]; 
        }
        int here = 1; 
        forn(j, 4)
        {
            here += children[j];
        }
        ans = max(ans, here); 
    }
    else if (p == -1) 
    {
        for (int u : edges[v]) 
        {
            f[v] = max(f[v], f[u] + 1); 
        }
    }
    
    ans = max(ans, f[v] + (p == -1 ? 0 : 1)); 
}
int main()
{
    int n; 
    cin >> n;
    edges.resize(n + 1); 
    forn(i, n - 1) 
    {
        int u, v;
        cin >> u >> v;
        edges[u].pb(v); 
        edges[v].pb(u);
    }
    f.resize(n + 1); 
    dfs(1, -1); 
    if (ans < 5) 
    {
        ans = -1; 
    }
    cout << ans; 
}
G
<u>Dense Buildings</u>
code
#include <bits/stdc++.h>
#include <atcoder/dsu>
using namespace std;
using namespace atcoder;
#define H 500          
#define W 500          
#define Q (int)2e+5    
#define F (int)1e+6    
int main(void)
{
    int h, w, q;                   
    int f[H][W];                   
    int a[Q], b[Q], y[Q];          
    int c[Q], d[Q], z[Q];          
    int l[Q], r[Q];                
    vector<pair<int, int>> e[F + 1];    
    vector<int> check[F + 1];           
    
    cin >> h >> w;
    
    for (int i = 0; i < h; i++)
        for (int j = 0; j < w; j++)
            cin >> f[i][j];
    
    cin >> q;
    for (int i = 0; i < q; i++)
    {
        cin >> a[i] >> b[i] >> y[i] >> c[i] >> d[i] >> z[i];
        a[i]--, b[i]--, c[i]--, d[i]--;  
    }
    
    
    for (int i = 0; i < h - 1; i++)
        for (int j = 0; j < w; j++)
            e[min(f[i][j], f[i + 1][j])].pushback({i * w + j, (i + 1) * w + j});
    
    for (int i = 0; i < h; i++)
        for (int j = 0; j < w - 1; j++)
            e[min(f[i][j], f[i][j + 1])].pushback({i * w + j, i * w + (j + 1)});
    
    for (int i = 0; i < q; i++)
        l[i] = 1, r[i] = F + 1;
    
    while (true)
    {
        bool flag = true;
        
        for (int i = 0; i <= F; i++)
            check[i].clear();
        
        for (int i = 0; i < q; i++)
        {
            if (r[i] - l[i] > 1)
            {
                check[(l[i] + r[i]) / 2].pushback(i);
                flag = false;
            }
        }
        if (flag) break;  
        
        dsu uf(h * w);
        
        for (int i = F; i >= 0; i--)
        {
            
            int sz = e[i].size();
            for (int j = 0; j < sz; j++)
                uf.merge(e[i][j].**first**, e[i][j].**second**);
            
            sz = check[i].size();
            for (int j = 0; j < sz; j++)
            {
                int idxs = a[check[i][j]] * w + b[check[i][j]];  
                int idxt = c[check[i][j]] * w + d[check[i][j]];  
                
                if (uf.same(idxs, idxt))
                    l[check[i][j]] = i;
                else
                    r[check[i][j]] = i;
            }
        }
    }
    
    for (int i = 0; i < q; i++)
        cout << (y[i] + z[i] - 2 * min(l[i], min(y[i], z[i]))) << endl;
    return 0;
}