IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Codeforces Round #770 (Div. 2) (A-D题解) -> 正文阅读

[数据结构与算法]Codeforces Round #770 (Div. 2) (A-D题解)

源代码:ACM/OpenjudgeNow/Codeforces at master · abmcar/ACM (github.com)

A. Reverse and Concatenate

在这里插入图片描述

题目大意:

在这里插入图片描述

思路:

我们发现对于任意的字符串s,s+rev(s)为一个回文串,而对于一个回文串t,t+rev(t) = rev(t) + t

因此我们只需要判断字符串是否为回文串即可

代码:

void work()
{
    string s;
    cin >> n >> m;
    cin >> s;
    string rs = s;
    reverse(rs.begin(), rs.end());
    if (m == 0 || rs + s == s + rs)
    {
        cout << 1 << endl;
        return;
    }
    cout << 2 << endl;
}

B. Fortune Telling

在这里插入图片描述

题目大意:

在这里插入图片描述

思路:

题目看上去有点难,但如果我们继续观察,可以发现+和xor的位运算在最后一位上结果是相同的

因此,我们根据数组的xor出的最后一位跟x和x+3对比

答案的最后一位和数组xor和的最后一位相同

代码:

void dfs(int nowNum, int nowPos, int nowAns)
{
    if (ok)
        return;
    if (nowPos == n + 1)
    {
        if (nowNum == y)
            ok = true;
        return;
    }
    if (nowNum + nowAns < y)
        return;
    dfs(nowNum + nums[nowPos], nowPos + 1, nowAns - nums[nowPos]);
    dfs(nowNum xor nums[nowPos], nowPos + 1, nowAns - nums[nowPos]);
}

void work()
{
    ok = false;
    cin >> n >> x >> y;
    nums.resize(n + 1);
    int totAns = 0;
    for (int i = 1; i <= n; i++)
        cin >> nums[i];
    totAns = x % 2 ;
    for (int i = 1; i <= n; i++)
        totAns = totAns xor (nums[i] % 2);
    if (y % 2 == totAns)
        cout << "Alice" << endl;
    else
        cout << "Bob" << endl;
}
     

C. OKEA

在这里插入图片描述

题目大意:

在这里插入图片描述

思路:

我们知道如果两个平均数为整数的区间的平均数为整数

那么我们可以选择尽可能让22区间的平均数为整数

另外,奇数+奇数 = 偶数 , 偶数+偶数=偶数

可以让奇数列为 1 3 5 7

偶数列为 2 4 6 8这种形式

可以证明这种情况最优

代码:

void work()
{
    cin >> n >> m;
    vector<vector<int>> ans(n + 1, vector<int>(m + 1));
    bool ok = true;
    int nowNum = 1;
    for (int i = 1; i <= n; i += 2)
    {
        for (int j = 1; j <= m; j++)
        {
            if (nowNum > n * m)
                ok = false;
            ans[i][j] = nowNum;
            nowNum += 2;
        }
    }
    nowNum = 2;
    for (int i = 2; i <= n; i += 2)
    {
        for (int j = 1; j <= m; j++)
        {
            if (nowNum > n * m)
                ok = false;
            ans[i][j] = nowNum;
            nowNum += 2;
        }
    }
    if (!ok)
    {
        cout << "NO" << endl;
        return;
    }
    cout << "YES" << endl;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cout << ans[i][j] << " \n"[j == m];
}

D. Finding Zero

在这里插入图片描述

题目大意:

在这里插入图片描述

思路:

我觉得我写的没有官方好,就直接放官方的了
在这里插入图片描述

代码:

int query(int i, int j, int k)
{
    cout << "? " << i << " " << j << " " << k << endl;
    cin >> lastAns;
    return lastAns;
}

void answer(int i, int j)
{
    cout << "! " << i << " " << j << endl;
}

void solve(vector<int> &nowNum)
{
    vector<pair<int, int>> nowAns(4);
    vector<int> newNum;
    nowAns[0] = {query(nowNum[1], nowNum[2], nowNum[3]), nowNum[0]};
    nowAns[1] = {query(nowNum[0], nowNum[2], nowNum[3]), nowNum[1]};
    nowAns[2] = {query(nowNum[1], nowNum[0], nowNum[3]), nowNum[2]};
    nowAns[3] = {query(nowNum[1], nowNum[2], nowNum[0]), nowNum[3]};
    sort(nowAns.begin(), nowAns.end());
    for (int i = 0; i < 4; i++)
        if (nowAns[0].second == nowNum[i] || nowAns[1].second == nowNum[i])
            newNum.push_back(nowNum[i]);
        else
            lastOut = nowNum[i];
    nowNum = newNum;
}

void work()
{
    used.clear();
    cin >> n;
    vector<int> nowNum;
    nowNum.push_back(1);
    nowNum.push_back(2);
    nowNum.push_back(3);
    nowNum.push_back(4);
    solve(nowNum);
    for (int i = 5; i <= n; i++)
    {
        nowNum.push_back(i);
        if (nowNum.size() == 4)
            solve(nowNum);
    }
    if (nowNum.size() == 3)
    {
        nowNum.push_back(lastOut);
        solve(nowNum);
    }
    // for (auto it : nowNum)
    //     cout << it << " ";
    // cout << endl;
    answer(nowNum[0], nowNum[1]);
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:39:43  更:2022-03-03 16:44:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:29:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码