首页 > 其他分享 >AcWing 第87场周赛题解

AcWing 第87场周赛题解

时间:2023-01-21 20:33:30浏览次数:53  
标签:周赛 maxstep idx int 题解 dfs step include 87

T1 移动棋子

算出为 \(1\) 的点离 \((3, 3)\) 的距离即可。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main() {
    int px = -1, py = -1;
    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= 5; j++) {
            int x;
            cin >> x;
            if (x) px = i, py = j;
        }
    }
    cout << abs(px - 3) + abs(py - 3) << '\n';
    return 0;
}

T2 打怪兽

可以从 \(1\) 枚举到 \(n\) 表示要打多少个怪兽。

因为你要打 \(t\) 个怪兽,并不管顺序,所以我们可以对 \([1, t]\) 这一段进行排序,然后计算 \(a[t], a[t - 2], a[t - 4], \dots\) 即可(因为你要干掉第 \(t\) 个怪兽的时候,必须要使用 \(a[t]\) 的法力值,因为排过序,所以连着 \(t - 1\) 一起干掉就可以了,对于编号小于 \(t\) 的也可以这么干)。

注意每一次都进行快速排序反而会更慢,我们采用插入排序,每次插入新来的数字即可,插入的时间复杂度: \(O(n)\)。

总时间复杂度:\(O(n^2)\)。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1010;

int n, m;
int a[N];

bool check(int k) {
    a[0] = -0x3f3f3f3f;
    int p = k;
    while (a[p] < a[p - 1]) {
        swap(a[p], a[p - 1]);
        p--;
    }
    int res = 0;
    for (int i = k; i >= 1; i -= 2) res += a[i];
    if (res <= m) return true;
    else return false;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> a[i];
    
    for (int i = 1; i <= n; i++) {
        if (!check(i)) {
            cout << i - 1 << '\n';
            return 0;
        }
    }
    cout << n << '\n';
    return 0;
}

T3 最远距离

请看:

我们规定,如果一个无向连通图满足去掉其中的任意一条边都会使得该图变得不连通,则称该图为有效无向连通图。

去掉一条边就不连通了,这不就是树吗?

(否则如果是图(就是不是树的图)的话,一定有环,拆了一条边从另一端还可以去,就不会不连通了)。

那么最长距离就变为:树的直径了。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100010, M = 200010;

struct Edge {
    int to, next;
}e[M];

int head[N], idx;

void add(int a, int b) {
    idx++, e[idx].to = b, e[idx].next = head[a], head[a] = idx;
}

void dfs(int u, int fa, int& maxver, int& maxstep, int step) {
    if (maxstep < step) {
        maxstep = step;
        maxver = u;
    }
    for (int i = head[u]; i; i = e[i].next) {
        int to = e[i].to;
        if (to == fa) continue;
        dfs(to, u, maxver, maxstep, step + 1);
    }
}

int n, m;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int a, b;
        cin >> a >> b;
        add(a, b), add(b, a);
    }
    // dfs(1, 0);
    int mv = 0, ms = 0, mv1 = 0, ms1 = 0;
    dfs(1, 0, mv, ms, 1);
    dfs(mv, 0, mv1, ms1, 1);
    cout << ms1 - 1 << '\n';
    return 0;
}

标签:周赛,maxstep,idx,int,题解,dfs,step,include,87
From: https://www.cnblogs.com/PlayWithCPP/p/17064017.html

相关文章

  • LeetCode.面试题02.05-链表求和-题解分析
    题目来源面试题02.05.链表求和题目详情给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并......
  • Codeforces Round48 Edu题解
    A-DeathNote(模拟)题意​ 现在有一本书,每页可以写下\(m\)个数字,给你一个序列\(a\),依次在书上誊写\(a_i\)个数字,请问誊写序列的第\(i\)个数的时候书翻了几页?​ ......
  • 20th Jan 1872.查找用户活跃分钟数
    20thJan1872.查找用户活跃分钟数给你用户在LeetCode的操作日志,和一个整数k。日志用一个二维整数数组logs表示,其中每个logs[i]=[IDi,timei]表示ID为IDi的......
  • HGAME 2023 Week2 Pwn YukkuriSay题解
    HGAME2023Week2PwnYukkuriSay题解检查保护:拿到文件先checksec一下:64位程序,开启canary和nx保护,没有开启PIE(可以使用绝对地址了)继续往下看,先不着急打开ida,我们先运......
  • GoodBye Renyin ABC题解
    GoodByeRenyinABC题解A答案为\(\text{YES}\)的充要条件是\(\max(a_i)\timesr\le(\suma_i-\max(a_i))\timesR\)。必要性显然。充分性是可以先把最大的放在\((......
  • 博客园美化及markdown代码问题解决
    博客园美化Cnblogs-Theme-SimpleMemory代码出处GitHub-BNDong/Cnblogs-Theme-SimpleMemoryatv1.2.6说明文档:简介-Document(bndong.github.io)如果无法进入网站,......
  • Deque 题解
    题目传送门一道区间\(dp\)题。在\(dp\)之前,我们需要明确以下几个东西:状态的表示,状态转移方程,边界条件跟答案的表示。状态的表示定义\(sum(l,r)=\sum_{i=l}^ra_......
  • 1538 迎春舞会之数字舞蹈 题解
    #include<iostream>intmain(){/**#Seven-segmentDisplay**Thewayhowtheprogramprintsdecimalnumericstotheconsoleworks......
  • CF225 Round #139 题解
    比赛链接:https://codeforces.com/contest/225题解:A题意题//bySkyRainWind#include<bits/stdc++.h>#definemprmake_pair#definedebug()cerr<<"Yoshino\n"#de......
  • 题解 ABC231D【Neighbors】
    首先,每个数不能有超过两个相邻元素,不然无法构成一条链。可以通过记录每个数出现次数(度数)来判断。其次,给的信息不能成环,不然也无法构成一条链。可以通过并查集来判断。在......