Educational Codeforces Round 154 (Rated for Div. 2)(A—D)

这篇具有很好参考价值的文章主要介绍了Educational Codeforces Round 154 (Rated for Div. 2)(A—D)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A. Prime Deletion

思路:

从1到9,每个数后面都可以加一个数构成一个含有两个数的质数,只需要从s[1]~s[9]中找到一个数与s[0]构成质数即可

代码实现

/*******************************
| Author:  CHC
| Problem: A. Prime Deletion
| Contest: Codeforces - Educational Codeforces Round 154 (Rated for Div. 2)
| URL:     https://codeforces.com/contest/1861/problem/A
| When:    2023-08-31 22:55:13
|
| Memory:  512 MB
| Time:    2000 ms
*******************************/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[11] = {0, 13, 23, 31, 41, 53, 61, 71, 83, 97};
void solve()
{
    string s;
    cin >> s;
    for (int i = 1; i < 10; i++)
        if (s[0] - '0' == i) {cout << a[i] << endl; break;}
}

int main()
{
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

B. Two Binary Strings

思路:

观察样例即可发现两个字符串只要在相同位置都有01存在就能成功实现转换后两个字符串相等

代码实现

/*******************************
| Author:  CHC
| Problem: B. Two Binary Strings
| Contest: Codeforces - Educational Codeforces Round 154 (Rated for Div. 2)
| URL:     https://codeforces.com/contest/1861/problem/B
| When:    2023-09-02 10:10:12
|
| Memory:  256 MB
| Time:    2000 ms
*******************************/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve()
{
    string a, b;
    cin >> a >> b;
    for (int i = 1; i < a.size(); i++)
    {
        if (a[i - 1] == '0' && a[i] == '1' && b[i - 1] == a[i - 1] && b[i] == a[i])
        {
            cout << "YES" << endl;
            return;
        }
    }
    cout << "NO" << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

C. Queries for the Array

思路

可以先假设字符串是可以成立的,那么接下来就判断它什么时间是不会成立就行了。
只有尾部增删操作,可以用 \(sum\) 记录当前整数的个数,用 \(s1\) 记录当前 \(s1\) 个数有序(这里用有序代表"\(a_1≤⋯≤a_n\)"),用 \(s2\) 记录当前 \(s2\) 个数无序。文章来源地址https://www.toymoban.com/news/detail-694023.html

  • s[i] == 1但前面有无序时(s2 ≤ sum)不会成立,具体看代码
  • s[i] == 0但前面有无序时(s1 ≥ sum)不会成立,具体看代码

代码实现

/*******************************
| Author:  CHC
| Problem: C. Queries for the Array
| Contest: Codeforces - Educational Codeforces Round 154 (Rated for Div. 2)
| URL:     https://codeforces.com/contest/1861/problem/C
| When:    2023-08-31 23:25:51
|
| Memory:  256 MB
| Time:    2000 ms
*******************************/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 1e9
void solve()
{
    string s;
    cin >> s;

    int sum = 0, s1 = 1, s2 = INF;//sum记录当前整数个数,s1记录前s1个数递增,s2记录前s2个数不满足递增条件
    for (char c : s) {
        if (c == '+') sum++;
        else if (c == '-') {
            sum--;
            if (sum > 0 && s1 > sum) s1 = sum;//前sum个数递增
            if (s2 > sum) s2 = INF;//不能判断前s2-1个整数的无序性,s2赋值为INF
        }
        //两种判断“NO”的情况
        else if (c == '1') {
            if (s2 <= sum) { cout << "NO\n"; return; }//c==1但前面有无序时
            s1 = max(s1, sum);//否则更新s1
        }
        else {
            if (s1 >= sum) { cout << "NO\n"; return; }//c==0但前sum个数都是有序时
            s2 = min(s2, sum);//否则更新s2
        }
    }
    cout << "YES\n";
}

int main()
{
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

D. Sorting By Multiplication

思路

  • 观察发现,每遇到一个\(a_i≥a_{i-1}\) 都可以取\(1\)~\(i\)\((a_l,a_r)*x\) 使得前\(i\)个数变成负数且单调递减,同理每遇到一个\(a_i≥a_{i+1}\) 都可以取\(1\)~\(i+1\)\((a_l,a_r)*x\) 使得前\(i+1\)个数变成正数且单调递增
  • 无论开始是怎样的数组,后来都会变成前缀是负数(单调递减),后缀是正数(单调递增) 注:前缀和后缀个数都有可能为0
  • 从前到后扫一遍求前缀需要改变的个数,用一个数组记录下。然后从后往前扫一遍求后缀需要改变的个数,
  • 最后求出每个\(i\)对应的前缀和后缀的和的最小值即可(注:无前缀时不需要把前缀*(-1),不用+1)
    具体看代码实现过程

代码实现

/*******************************
| Author:  CHC
| Problem: D. Sorting By Multiplication
| Contest: Codeforces - Educational Codeforces Round 154 (Rated for Div. 2)
| URL:     https://codeforces.com/contest/1861/problem/D
| When:    2023-09-04 17:47:30
|
| Memory:  256 MB
| Time:    2000 ms
*******************************/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve()
{
    int n;
    cin >> n;
    vector<int> a(n + 1);

    //让最后的数组形式变为前缀为负数(单调递减)+后缀为正数(单调递增)
    vector<int> b(n + 2, 0);//前缀需要改变的
    vector<int> c(n + 2, 0);//后缀需要改变的
    for (int i = 1; i <= n; i++) cin >> a[i];

    //前缀严格递减需要改变的
    for (int i = 2; i <= n; i++)
        b[i] += b[i - 1] + (a[i - 1] <= a[i]);

    //后缀严格递增需要改变的
    for (int i = n - 1; i >= 1; i--)
        c[i] += c[i + 1] + (a[i] >= a[i + 1]);

    //前缀最后需要*(-1)把前缀变为递增的,当后缀需要改变的最小时且不需要前缀(i!=1)时,不用再*(-1),不需要+1
    int res = 1e9 + 5;
    for (int i = 1; i <= n + 1; i++)
        res = min(res, b[i - 1] + c[i] + (i != 1));

    cout << res << endl;

}

int main()
{
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

到了这里,关于Educational Codeforces Round 154 (Rated for Div. 2)(A—D)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Educational Codeforces Round 148 (Rated for Div. 2) 题解

    总结:5.21下午VP一场,死在了A题,给我wa崩溃了,浪费了差不多一个小时,BC还挺顺畅,虽然C题是在结束后不久交上去的。。。。 思路:其实思路很简单, “ The string s a palindrome ”, 题目已经说了所给的为回文字符串,所以直接判断一半 有几种字符 即可(开始的时候计算整

    2024年02月06日
    浏览(37)
  • Educational Codeforces Round 62 (Rated for Div. 2) C. Playlist

     一开始肯定要排个序,b相同时t大的在前边,不同时b大的在前面。 然后想最多只能选k个的限制,可以这样想,每次用到的b只能用已选到的最小的值,那可以把每个b都枚举一遍,然后每一次选时长最长的,且b大于等于当前的b的那k个不就好了吗,时间复杂度也才O(n),然

    2024年02月12日
    浏览(40)
  • Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)

    C. Digital Logarithm 给两个长度位 n n n 的数组 a a a 、 b b b ,一个操作 f f f 定义操作 f f f 为, a [ i ] = f ( a [ i ] ) = a [ i ] a[i]=f(a[i])=a[i] a [ i ] = f ( a [ i ]) = a [ i ] 的位数 求最少多少次操作可以使 a 、 b a、b a 、 b 两个数组变得完全相同 性质: 对于任何数,经过两次操作我们一定可以

    2024年02月20日
    浏览(38)
  • 【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

    🌏博客主页: PH_modest的博客主页 🚩当前专栏: 每日一题 💌其他专栏: 🔴 每日反刍 🟡 C++跬步积累 🟢 C语言跬步积累 🌈座右铭: 广积粮,缓称王! 题目大意:给你一串由1、2、3组成的数组,让你求一个最短的子串,要求这个子串包含1、2、3 题目链接:B. Ternary String

    2024年02月16日
    浏览(38)
  • Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+组合数学)

    题目 称一个长为n的数列a是fancy的,当且仅当: 1. 数组内至少有一个元素在[x,x+k-1]之间 2. 相邻项的差的绝对值不超过k,即 t(t=50)组样例,每次给定n(1=n=1e9),x(1=x=40), 求fancy的数组的数量,答案对1e9+7取模 思路来源 灵茶山艾府群 官方题解 题解 看到 至少 的字眼,首先想到容斥,

    2024年02月05日
    浏览(40)
  • Educational Codeforces Round 161 (Rated for Div. 2) E. Increasing Subsequences 动态规划逼近,二进制拆分补充,注意严格递增

    Problem - E - Codeforces 目录 推荐视频: 题意: 细节(我踩得没什么价值的坑): 思路: 对样例3 (X = 13)做解释: —————— 总思路: —————— 动态规划逼近: —————— 二进制拆分补充剩余: 核心代码:  E_哔哩哔哩_bilibili 其实有一些细节说的不是特别清楚好

    2024年02月22日
    浏览(39)
  • Educational Codeforces Round 161 (Rated for Div. 2) E题 动态规划逼近,二进制拆分补充,注意严格递增strictly increasing

    Problem - E - Codeforces 目录 推荐视频: 题意: 细节(我踩得没什么价值的坑): 思路: 对样例3 (X = 13)做解释: —————— 总思路: —————— 动态规划逼近: —————— 二进制拆分补充剩余: 核心代码:  E_哔哩哔哩_bilibili 其实有一些细节说的不是特别清楚好

    2024年01月24日
    浏览(42)
  • Educational Codeforces Round 145 Div. 2 题解

    目录 A. Garland(签到) 题面翻译 思路: 代码 B. Points on Plane(数学) 题面翻译 思路: 代码 C. Sum on Subarray(构造) 题面翻译: 思路: 代码 D. Binary String Sorting 题面翻译 思路: 代码 You have a garland consisting of 4 colored light bulbs, the color of the i-th light bulb is si. Initially, all the l

    2023年04月09日
    浏览(38)
  • Educational Codeforces Round 147 div2题解

    目录 A. Matching(签到) 思路: 代码:  B. Sort the Subarray(签到) 思路: 代码: C. Tear It Apart(枚举) 思路: 代码: D. Black Cells(模拟) 思路:  代码一: 代码二:(模仿自\\\"AG\\\"佬) An integer template is a string consisting of digits and/or question marks. A positive (strictly greater than 0) in

    2023年04月21日
    浏览(39)
  • Educational Codeforces Round 134 (Div.2) D 题解

    D. Maximum AND 给定两组序列 (a) (b) ,长度为 (n) ,现有一新序列 (c) ,长度也为 (n) 。 其中, (c_i = a_i oplus b_i) 。 定义 (f(a,b) = c_1c_2……c_n) 。 现在你可以随意编排 (b) 序列的顺序,求 (f(a,b)) 的最大值。 以下位运算均是二进制。 由于按位与的运算结果是越来越小的

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包