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 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Codeforces Round #787 (Div. 3) (A-C 明早起来再补题QAQ) -> 正文阅读

[C++知识库]Codeforces Round #787 (Div. 3) (A-C 明早起来再补题QAQ)

	哎菜鸡的cf复健日常

A Food for Animals

水题。。。

int T;  cin >> T;
while (T--) {
    int a, b, c, x, y;
    cin >> a >> b >> c >> x >> y;
    x -= a;
    x = max(0, x);
    y -= b;
    y = max(0, y);
    if (x + y <= c)
        cout << "YES\n";
    else
        cout << "NO\n";
}

B Make It Increasing

水题。。不知道为什么小学妹小学弟一直wa QAQ,写过思路吧还是。

题意

给出一个数组 a [ n ] a[n] a[n],对于数组的每个元素 a i a_i ai? 都可以使之除以二(向下取整),没除以2一次就算是一次操作,问最少需要对元素进行多少次这样的操作,才能使得数组成为严格上升数组,即: a 0 < a 1 < . . . < a n ? 1 a_0 < a _1 < ... < a_{n-1} a0?<a1?<...<an?1?

思路

题目重点在最少,既然想要操作最小,那么就一定使得操作后的最大值最大,然后其他值依次刚刚好大于后一个值就好了。

因为操作后的最大值为 a n ? 1 a_{n-1} an?1?,那就使得它最大就好了,然而使得它最大的方法就是:不改变 a n ? 1 a_{n-1} an?1?的值。

所以正解就是逆向遍历数组,数组最后一个值不变,对于之后遍历的任意 a i a_i ai?都使其刚刚好比 a i + 1 a_{i + 1} ai+1?小,就好了。在改变的过程中,主要 a i a_i ai?被变成0时,如果此时 i ! = 0 i != 0 i=0,说明后面的元素都会变成0,所以输出-1。

int T;
cin >> T;
while (T--) {
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    int ans = 0;
    bool flag = 0;
    for (int i = n - 2; i >= 0; i--) {
        while (a[i] >= a[i + 1]) {
            a[i] >>= 1;
            if (a[i] == a[i + 1] && a[i] == 0) {
                flag = 1;
                break;
            }
            ans++;
        }
        if (flag)
            break;
    }
    if (flag)
        cout << "-1\n";
    else
        cout << ans << "\n";
}

C Detective Task

模拟题。。。。又是一亿次漏判。。。

依次判断 0 、1、 ?是否存在与s中的情况,然后判断其位置就行了。
需要注意的是,0必然在1之后,否则不成立。
· 当只有 01时,答案一定为2,就因为1一定在0后面,所以能怀疑的只能是相邻的10,因为在第一个0之后,后面的只能全是0;
· 当只有0?时,那只可能是 x个?+ 1个0这种 情况才值得怀疑,所以答案是 x + 1;
· 当只有1?时,那就只可能是1个1+ y个?且 这里的1为字符串中最后一个1这个时候才可以怀疑,因为…11???111…这种的话因为?后面还有1,所以可以断定?一定可以替换为1。所以答案应该为1 + y;
· 当只有1时,只能怀疑最后一个1,答案为1;
· 当只有0时,只能怀疑第一个0,答案为1;
· 当只有?时,全部都值得怀疑,答案为n;
· 当01?都存在时,因为1一定在0 前面,所以我们只需要讨论?的位置。当出现顺序为 1 0 ? 或者 ?0 1,说明?一定能被替换成0(01?的顺序时),或者替换成1(10?的顺序时),则答案为2。当出现顺序为1?0时,只需要判断第一出现0之前,?的个数z‘,在加上?前后相邻的一个1和0,则答案为z’+2。

int T; cin >> T;
while (T--) {
    int ans = 0;
    string s; cin >> s;
    bool flag = 0;
    n = s.size();
    if (n == 1) {
        cout << "1\n";
        continue;
    }
    int x = -1, y = -1, z = -1;
    for (int i = 0; i < n; i++) {
        if (s[i] == '0' && x == -1) x = i;
        else if (s[i] == '1' && y == -1) y = i;
        else if (s[i] == '?' && z == -1) z = i;
    }
    if (z == -1) {
        if (y == -1 || x == -1) ans = 1;
        else ans = 2;
    } 
    else if (x == y && x == -1) ans = n;
    else if (x == -1) {
        if (s[n - 1] == '1') ans = 1;
        else {
            for (int i = n - 1; i >= 0; i--) {
                if (s[i] == '1') {
                    y = i;
                    break;
                }
            }
            ans = n - y;
        }
    } else if (y == -1) {
        if (z == 0)  ans = x + 1;
        else
            ans = 1;
    } else if (z > x && z > y)
        ans = 2;
    else {
        for (int i = x; i >= 0; i--) {
            ans++;
            if (s[i] == '1') break;
        }
    }
    cout << max(1, ans) << "\n";
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:47:23  更:2022-05-14 09:48:59 
 
开发: 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年5日历 -2024/5/10 17:54:20-

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