草庐IT

atcoder补题题解 abc_292 a~e

-cen 2023-03-28 原文

A - CAPS LOCK

题意:
将输入字母转成大写

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    string temp;
    cin >> temp;
    transform(temp.begin(), temp.end(), temp.begin(), ::toupper);
    cout << temp << endl;
    return 0;
}

总结:
如题

B - Yellow and Red Card

题意:
"1 x"是玩家x吃到黄牌, "2 x"是玩家x吃到红牌, "3 x"是询问玩家x是否被逐出游戏. 吃到2次黄牌或者一次红牌的玩家会被逐出游戏

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    int n, q;
    cin >> n >> q;
    map<int, int> cnt;
    for (int i = 1; i <= q; ++i)
    {
        int n1, n2;
        cin >> n1 >> n2;
        if (n1 == 3)
        {
            cout << (cnt[n2] >= 2 ? "Yes" : "No") << endl;
        }
        else
        {
            cnt[n2] += n1;
        }
    }
    return 0;
}

总结:
如题

C - Four Variables

题意:
给一个正整数N, 求出符合 (AB+CD=N) 形式的 (A, B, C, D) 有几种

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxN = 2e5 + 10;

map<int, int> cnt;
void init()
{
    for (int i = 1; i <= maxN; ++i)
    {
        for (int j = 1; j * j <= i; ++j)
        {
            if (i % j == 0)
            {
                ++cnt[i];
                if (i / j != j)
                {
                    ++cnt[i];
                }
            }
        }
    }
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    init();
    int n;
    cin >> n;
    int ans = 0;
    for (int i = 1; i < n; ++i)
    {
        ans += cnt[i] * cnt[n - i];
    }
    cout << ans << endl;
    return 0;
}

总结:
求出1到2e5每个数能分解成几对2个因数相乘, 复杂度 nlogn
从1到N-1, 累加一下相乘的结果得到答案

D - Unicyclic Components

题意:
给出一个无向图, 问无向图的每一个连通块是否是满足点数等于边数

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxN = 2e5 + 10;

vector<int> son[maxN];
map<pair<int, int>, int> cnt1;
map<int, int> cnt2;
map<int, bool> vis;
map<pair<int, int>, bool> vis2;
int num1, num2;
void dfs(int now)
{
    ++num1;
    num2 += cnt2[now];
    vis[now] = 1;
    int len = son[now].size();
    for (int i = 0; i < len; ++i)
    {
        int v = son[now][i];
        if (!vis2[make_pair(now, v)] && !vis2[make_pair(v, now)])
        {
            vis2[make_pair(now, v)] = 1;
            num2 += cnt1[make_pair(now, v)];
            num2 += cnt1[make_pair(v, now)];
        }
        if (!vis[v])
        {
            dfs(v);
        }
    }
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= m; ++i)
    {
        int u, v;
        cin >> u >> v;
        if (u == v)
        {
            ++cnt2[u];
        }
        else
        {
            son[u].push_back(v);
            son[v].push_back(u);
            ++cnt1[make_pair(u, v)];
        }
    }
    for (int i = 1; i <= n; ++i)
    {
        num1 = 0, num2 = 0;
        if (!vis[i])
        {
            dfs(i);
        }
        if (num1 != num2)
        {
            cout << "No" << endl;
            return 0;
        }
    }
    cout << "Yes" << endl;
    return 0;
}

总结:
如题, 感觉写的不好.

E - Transitivity(补)

题意:
给出一个有向图, 问对于每三个不同的点若满足 (若顶点A指向顶点B, 顶点B指向顶点C, 则顶点A指向顶点C) 需要添加几条边.

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxN = 2010;

int n, m;
vector<int> son[maxN];
int ans;
signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    cin >> n >> m;
    for (int i = 1; i <= m; ++i)
    {
        int u, v;
        cin >> u >> v;
        son[u].push_back(v);
    }
    map<int, bool> vis;
    for (int i = 1; i <= n; ++i)
    {
        vis.clear();
        vis[i] = 1;
        queue<int> q;
        q.push(i);
        while (q.size())
        {
            int now = q.front();
            q.pop();
            int len = son[now].size();
            for (int i = 0; i < len; ++i)
            {
                int v = son[now][i];
                if (vis[v])
                {
                    continue;
                }
                vis[v] = 1;
                ++ans;
                q.push(v);
            }
        }
    }
    cout << ans - m << endl;
    return 0;
}

总结:
题目条件可以转换为一个顶点和它可以去到的每一个顶点之间都要有一条边, 那这样的话就可以对每一个点跑一遍bfs, 累加每个点的边数, 最后在边的总数量中减掉一开始就有的M条边就是答案了

有关atcoder补题题解 abc_292 a~e的更多相关文章

  1. 【算法题解】20. 两数之和 - 2

    这是一道简单题题目来自:https://leetcode.cn/problems/two-sum/题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。提示:22nums.length104−109−109nums[i]109−109−109target109只会存在一个有效答案进阶:你可以想出一个时间复杂度小于O(n2)O(n^2)O(n2)的算法吗?示例1:输入:nums=[2,7,11,15],targe

  2. ruby - Ruby 是否有 string.startswith ("abc") 内置方法? - 2

    Ruby是否有内置的some_string.starts_with("abc")方法? 最佳答案 它叫做String#start_with?,而不是String#startswith:在Ruby中,bool型方法的名称以?结尾,方法名称中的单词以_分隔>。在Rails上,您可以使用别名String#starts_with?(注意复数-并注意此方法已弃用)。就个人而言,我更喜欢String#starts_with?而不是实际的String#start_with? 关于ruby-Ruby是否

  3. javascript - 为什么 (function(){return this}).bind ('abc' )()== ='abc' 等于 false? - 2

    假设我有一个这样的函数:varf1=function(){returnthis;};console.log(f1.bind('abc')()==='abc');据我所知,f1.bind('abc')应该创建一个返回'abc'的新函数,所以我猜它的输出应该与console.log('abc'==='abc')这是真的,但现在输出是假的,我的猜测有什么问题吗? 最佳答案 在非严格模式下,原始值被包裹在对象中。所以,'abc'变成了newObject('abc')。在严格模式下,这不会发生。'usestrict';varf1=functi

  4. javascript - JavaScript 中的正则表达式 - 匹配类似 "ABC12"的字符串 - 2

    这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。如何在JavaScript中使用正则表达式匹配下面的字符串?总共有5个字符前3个字符为大写最后2个字符只是数字我得到了这个模式,[A-Z]{3}[0-9]{2},但它似乎仍然缺少一些东西。

  5. javascript - 如何在没有后视的情况下匹配 '+abc' 而不是 '++abc'? - 2

    一句话类似:Loremipsum+dolor++sitamet.我想匹配+dolor但不是++sit.我可以通过回顾来做到这一点,但是因为JavaScript不支持它我正在努力为它建立一个模式。到目前为止,我已经尝试过:(?:\+(.+?))(?=[\s\.!\!])-butitmatchesbothwords(?:\+{1}(.+?))(?=[\s\.!\!])-thesamehere-bothwordsarematched令我惊讶的是这样的模式:(?=\s)(?:\+(.+?))(?=[\s\.!\!])不匹配任何东西。我以为我可以欺骗它并使用\s或者稍后还有^在+之前签名,但它似

  6. 蓝桥杯第十四届省赛完整题解 C/C++ B组 - 2

    没有测评,不知道对不对,仅仅过样例而已试题A:日期统计本题总分:5分【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素从左至右如下所示:5686916124919823647759503875815861830379270588570991944686338516346707827689565614010094809128502533现在他想要从这个数组中寻找一些满足以下条件的子序列:   1.子序列的长度为8;   2.这个子序列可以按照下标顺序组成一个yyyymmdd格式的日期,并且要求这个日期是2023年中的某一天的日期,例如202309

  7. javascript - 使用 Javascript 我如何搜索字符串中的前三个字母并查看它们是否匹配 "ABC"? - 2

    使用Javascript我如何搜索字符串中的前三个字母并查看它们是否匹配“ABC”?谢谢 最佳答案 使用正则表达式:str.match(/^ABC/);或者使用substring方法:str.substring(0,3)=='ABC'; 关于javascript-使用Javascript我如何搜索字符串中的前三个字母并查看它们是否匹配"ABC"?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que

  8. 2023第十四届蓝桥杯C/C++B组省赛题解 - 2

    2023蓝桥C/C++B组省赛文章目录2023蓝桥C/C++B组省赛试题A:日期统计题目描述枚举参考代码试题B:01串的熵题目描述枚举|模拟参考代码试题C:冶炼金属题意描述取交集参考代码试题D:飞机降落题意描述DFS+剪枝,懒得写试题E:接龙数列题意描述DP参考代码试题F:岛屿个数题意描述dfs|连通块参考代码试题G:子串简写题意描述前缀和参考代码试题H:整数删除题意描述双向链表|最小堆参考代码试题I:景区导游题意描述带权LCA参考代码试题J:砍树题意描述树上差分参考代码试题A:日期统计题目描述【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素

  9. LeetCode——链表简单题题解 - 2

    83.删除排序链表中的重复元素题目描述给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。输入:head=[1,1,2]输出:[1,2]解题思路:用一个指向节点类型的指针保存头结点,用另一个指向节点类型的指针对该链表进行遍历,由于是有序的,当出现不同的值就说明不会再出现跟前面的值相同的节点了,最后循环结束的条件是遍历到最后一个节点的时候,也就是该节点的next指向空的时候,停止循环,返回该保存的头结点,另外,如果传过来的头结点是空,则直接返回空。参考代码:/***Definitionforsingly-linkedlist.*structListNod

  10. go - ProtoBuf 解码 key : [ ["abc", "123"], ["123"]] - 2

    如何解码字符串列表?类似于://Triedrepeatedstring...ListOfString....repeatedlistofstringmessageLink{stringid=1;stringnames=2;}jsonstr:=`{"names":[["Bill","Susan"],["Jim","James"]]}`//gocodejsonpb.Unmarshal(jsonstr,&pb.Link)使用jsonpb解码:https://godoc.org/github.com/golang/protobuf/jsonpb获取json:无法将数组解码为Go值

随机推荐