【持续更新】2024牛客寒假算法基础集训营2 题解 | JorbanS

文章描述了几种与Tokitsukaze命名的编程问题,涉及整数处理、二维数组操作、路径优化、字符处理和密码验证等,展示了不同难度级别的算法实现。
摘要由CSDN通过智能技术生成

A - Tokitsukaze and Bracelet

int solve() {
    int res = 0;
    int x, y[2]; cin >> x >> y[0] >> y[1];
    res += (x - 100) / 50;
    for (int i = 0; i < 2; i ++) {
        int t = y[i];
        if (t == 45) res += 2;
        else if (t > 32) res ++;
    }
    return res;
}

B - Tokitsukaze and Cats

int n, m;
int k;
bool a[N][N];

int solve() {
    cin >> n >> m >> k;
    while (k --) {
        int x, y; cin >> x >> y;
        a[-- x][-- y] = true;
    }
    int res = 0;
    for (int i = 0; i < n + 1; i ++) {
        for (int j = 0; j < m; j ++) {
            if (i && a[i - 1][j] || a[i][j]) res ++;
        }
    }
    for (int i = 0; i < n; i ++) {
        for (int j = 0; j < m + 1; j ++) {
            if (j && a[i][j - 1] || a[i][j]) res ++;
        }
    }
    return res;
}

D - Tokitsukaze and Slash Draw

赛时 ≤ \le 写成了 < \lt < T T T 了四发,我就说这复杂度还能 T T T ? 🥲🥲🥲

int n, m;
int k;
int a[N], b[N];
ll f[N];

ll solve() {
    cin >> n >> m >> k;
    for (int i = 0; i < m; i ++) cin >> a[i] >> b[i];
    memset(f, -1, sizeof f);
    f[k - 1] = 0;
    queue<int> q;
    q.push(k - 1);
    while (!q.empty()) {
        auto u = q.front();
        q.pop();
        for (int i = 0; i < m; i ++) {
            int v = (u + a[i]) % n;
            if (f[v] != -1 && f[v] <= f[u] + b[i]) continue;
            f[v] = f[u] + b[i];
            q.push(v);
        }
    }
    return f[n - 1];
}

E - Tokitsukaze and Eliminate (easy)

int n, m;
int a[N];

int solve() {
    cin >> n;
    int c1 = 0;
    for (int i = 0; i < n; i ++) cin >> a[i], c1 += a[i] == 1;
    if (!(n - c1) || !c1) return n;
    int res = 0;
    int r = n - 1;
    for (int i = n - 2; i >= 0; i --)
        if (a[i] != a[i + 1]) res ++, r = i, i --;
    res += r;
    return res;
}

F - Tokitsukaze and Eliminate (hard)

int n, m;

int solve() {
    cin >> n;
    set<int> e[n + 1];
    set<int> st;
    for (int i = 0; i < n; i ++) {
        int x; cin >> x;
        e[x].insert(i);
        st.insert(x);
    }
    if (st.size() == 1) return n;
    m = n;
    int res = 0;
    while (m) {
        int r = n;
        for (auto i : st)
            if (e[i].size()) r = min(r, *-- e[i].end());
        res ++;
        vector<int> de;
        for (auto i : st) {
            while (e[i].size() && *-- e[i].end() >= r)
                e[i].erase(-- e[i].end()), m --;
            if (e[i].empty()) de.emplace_back(i);
        }
        for (auto i : de) st.erase(i);
    }
    return res;
}

I - Tokitsukaze and Short Path (plus)

int n, m;
int a[N];

ll solve() {
    cin >> n;
    for (int i = 0; i < n; i ++) cin >> a[i];
    sort(a, a + n);
    ll res = 0;
    for (int i = 0; i < n; i ++) res += (ll)a[i] * i << 2;
    return res;
}

J - Tokitsukaze and Short Path (minus)

int n, m;
int a[N];

ll solve() {
    cin >> n;
    for (int i = 0; i < n; i ++) cin >> a[i];
    sort(a, a + n);
    ll res = 0;
    for (int i = 0; i < n; i ++) res += (ll)min(a[0] << 3, a[i] << 2) * (n - i - 1);
    return res;
}

K - Tokitsukaze and Password (easy)

审题审错了,赛时当 a , b , c , d , _ a,b,c,d,\_ a,b,c,d,_ 数量未知来做了,把 easy 当成 hard 来做了(

int n, m;
string s;
int y;

int solve() {
    cin >> n >> s >> y;
    set<int> st;
    for (char a = '0'; a <= '9'; a ++)
        for (char b = '0'; b <= '9'; b ++)
            for (char c = '0'; c <= '9'; c ++)
                for (char d = '0'; d <= '9'; d ++)
                    for (char _ = '0'; _ <= '9'; _ ++) {
                        if (a == b || a == c || a == d || b == c || b == d || c == d) continue;
                        int x = 0;
                        string t = s;
                        for (auto &i : t) {
                            if (i == 'a') i = a;
                            if (i == 'b') i = b;
                            if (i == 'c') i = c;
                            if (i == 'd') i = d;
                            if (i == '_') i = _;
                            x = x * 10 + i - '0';
                        }
                        if (to_string(x).size() == n && x <= y && x % 8 == 0) st.insert(x);
                    }
    return st.size();
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JorbanS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值