草庐IT

[cf]Codeforces Round #784(Div 4)

hygge 2023-03-28 原文

由于一次比赛被虐得太惨,,生发开始写blog的想法,于是便有了这篇随笔(找了个近期的cf比赛练练手(bushi))第一次写blog,多多包涵。

第二场cf比赛,第一场打的Div2,被虐太惨,所以第二场挑了个Div4...

比赛链接: https://codeforces.com/contest/1669

A. Division

  

 

 

翻译(参考):

  t组样例,每组样例给出一个正整数,判断该整数所在的范围 

题解:

  签到题,分类讨论下即可

B.Trip

 

 

翻译(参考): 

  t组样例,每组给出一个长度为n的数组,对每组样例输出一个在该数组中出现三次及三次以上的数字(可能有多个,输出任意一个就好),若不存在则输出-1.

题解:

  签到题,An<=2e5,值域范围不大,开个数组记录即可(值域过大可以考虑用map记录)。

C. Odd/Even Increments

 

 翻译(参考)

  t组样例,对每组样例给出一个长度为n的数组(下标从1开始),有以下两种操作,每种操作可进行任意次

    1. 对所有奇数下标的元素+1

    2. 对所有偶数下标的元素+1

  问是否能进行以上两种操作使得数组所有元素都为奇数或都为偶数

题解:

  思维题,很容易想到如果原数组奇数和偶数分别对应的下标不满足均为奇数或者均为偶数不可能经过操作满足条件

  故而,分别判断奇数下标是否全为奇或全为偶,偶数下标是否全为奇或全为偶即可。

D. Colorful Stamp

 

 

 

 

 

 

 翻译(参考):

  t组样例,每组给出一个仅由W R B组成的字符串。问该字符串能否经过操作(选择相邻的两个字符,一个变为R另一个变为B)由全为W的等长字符串得到,若可以输出YES,否则输出NO

题解:

样例解释:

  (BRB)

    WWW→WRB→BRB(YES)

  (RRR)

    不可能由WWW得到(NO)

  思维题,我们很容易想到每次操作的结果都是一个R一个B,,操作变换有以下四种情况(对W不能进行操作,因为W改变了不可能再变回去)

    1. RR ---> RB / BR(减少一个R)

    2. BB ---> RB / WR(减少一个W)

    3. RB ---> BR

    4. BR ---> RB

可以得出结论,只要字串中既含B又含有R就可以得到目标字串

把W看成空格得到一堆字串,判断这些字串中是否全为B或者全为B即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
string s;
void solve()
{
    int n, r = 0, b = 0, cnt = 0; // r记录R的个数,b记录B的个数
    cin >> n;
    getline(cin, s); //消除换行符
    getline(cin, s); //读入目标字符串
    for (int i = 0; i < n; i++)
    {
        if (s[i] == 'R')
        {
            cnt++;
            r++;
        }
        else if (s[i] == 'B')
        {
            cnt++;
            b++;
        }
        else //遇到W标志已得到一个子串进行判断该字串是否满足条件
        {
            if (r == 0 || b == 0)
            {
                cout << "NO\n";
                return;
            }
            cnt = 0, r = 0, b = 0;
        }
    }
    if (r == 0 || b == 0) //最后的一个不以W分隔的子串
    {
        cout << "NO\n";
        return;
    }
    cout << "YES\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    getline(cin, s);
    while (__--)
    {
        solve();
    }
}
E.2-Letter Strings

 

 

 

 

 翻译(参考):

  t组样例,对每组样例给出n个长度为2的仅由abcdefghijk构成的字符串,求有几对字符串满足只有一个对应位置相同。

题解:

样例解释:

7
aa
bb
cc
ac
ca
bb
aa
("aa", "ac"), ("aa", "ca"), ("cc", "ac"), ("cc", "ca"), ("ac", "aa") and ("ca", "aa")
共计6种

  可以由容斥原理想到,先分别统计对每种字符在多少个字符串的第一个位置出现和对每种字符在多少个字符串的第二个位置出现的数量减去2*相同的字符串的个数(因为相同的字符串在第一个字符相同和第二个字符相同都有被统计)。利用组合数求出对应的每种情况的个数C2m

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
string s;
void solve()
{
    ll ans = 0;
    map<char, ll> mp1, mp2; // mp1统计在位置一(s[0])相同的字符串个数,mp2统计在位置二(s[1])相同的字符串个数
    map<string, ll> mp;     //统计相同的字符串个数
    int n;
    cin >> n;
    getline(cin, s); //吸收换行符
    for (int i = 0; i < n; i++)
    {
        string ss;
        getline(cin, ss);
        if (mp.find(ss) != mp.end())
        {
            mp[ss]++;
        }
        else
        {
            mp[ss] = 1;
        }
        if (mp1.find(ss[0]) != mp1.end())
        {
            mp1[ss[0]]++;
        }
        else
        {
            mp1[ss[0]] = 1;
        }
        if (mp2.find(ss[1]) != mp2.end())
        {
            mp2[ss[1]]++;
        }
        else
        {
            mp2[ss[1]] = 1;
        }
    }
    for (auto it : mp1) //统计每种字符在位置一相同的字符串的贡献
    {
        if (it.second != 1)
        {
            int t = it.second;
            ans += (t * (t - 1) / 2);
        }
    }
    for (auto it : mp2) //统计每种字符在位置二相同的字符串的贡献
    {
        if (it.second != 1)
        {
            int t = it.second;
            ans += (t * (t - 1) / 2);
        }
    }
    for (auto it : mp) //统计每种相同字符串的贡献
    {
        if (it.second > 1)
        {
            int t = it.second;
            string te = it.first;
            ans -= 2 * (t * (t - 1) / 2);
        }
    }
    cout << ans << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    getline(cin, s);
    while (__--)
    {
        solve();
    }
}
F. Eating Candies

 

 翻译(参考):

  t组样例,对每组样例给出n个数分别为糖果的价值,Alice从左开始吃糖果,Bob从右往左开始吃糖果,每次只能有一个人吃到糖果,问是否能有一种方案使得两人在中途吃到的糖果总数量相同,输出最大糖果数量

题解:

样例解释:

9

7 3 20 5 15 1 11 8 10

Alice :  [7,3,20]

Bob :  [10,8,11,1]

两人吃的总价值均为30

可以吃的最多的糖果数量为7个

  笔者认为此题考查了前缀和,后缀和,二分。前缀和维护Alice吃的糖果总价值,后缀和维护Bob吃的糖果的总价值,二分查找前缀和对应的元素在后缀和数组中的位置,若出现可更新结果(Alice和Bob的总价值相同),对结果取max输出即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
ll w[200009], a[200009], b[200009]; //记得开long long,因为前缀和或后缀和可能很大会爆int
void solve()
{
    int n, ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> w[i];
        a[i] = a[i - 1] + w[i]; //前缀和->Alice的总价值
    }
    b[n + 1] = 0;
    for (int i = n; i >= 1; i--)
    {
        b[i] = b[i + 1] + w[i]; //后缀和->Bob的总价值
    }
    for (int r = n; r > 1; r--)
    {
        int p = lower_bound(a + 1, a + 1 + r - 1, b[r]) - a; //二分查找
        if (p != r && a[p] == b[r])                          //找到的位置值相同,更新答案
        {
            ans = max(ans, p + n - r + 1); // Alice:p个  Bob:n-r+1个
        }
    }
    cout << ans << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    while (__--)
    {
        solve();
    }
}
G. Fall Down

 翻译(参考):

t组样例,对每组样例给出n*m的地图,‘*’代表石头,‘.’代表空地,‘o’代表障碍,对每个石头可以进行下落直到遇到障碍或到达底部,输出最终的地图。

样例:

6 10
.*.*....*.
.*.......*
...o....o.
.*.*....*.
..........
.o......o*

输出:

..........
...*....*.
.*.o....o.
.*........
.*......**
.o.*....o*

题解:

  对每个*(石头)往下找第一个不为.(空地)的位置或已到达底部,将二者进行交换即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
void solve()
{
    int n, m;
    cin >> n >> m;
    char s[60][60];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> s[i][j]; //读入
        }
    }
    for (int i = n - 2; i >= 0; i--)
    {
        for (int j = 0; j < m; j++)
        {
            if (s[i][j] == '*') //石头
            {
                int k = i + 1;
                while (k < n && s[k][j] == '.') //找第一个不为空地的位置或已到达底部
                {
                    k++;
                }
                swap(s[i][j], s[k - 1][j]); //交换
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << s[i][j];
        }
        cout << "\n";
    }
    cout << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    while (__--)
    {
        solve();
    }
}
H. Maximal AND
 
咳咳,鄙人不才,此题赛时没写出来,赛后也没去补题.....
 
ending:
第一次写blog,有什么错误之处欢迎指正!鄙人不胜感激!

有关[cf]Codeforces Round #784(Div 4)的更多相关文章

  1. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  2. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  3. ruby-on-rails - Ruby slim - 来自变量的 div 类 - 2

    我知道这篇文章在这里:RubySlim-Howdoyoudefineanelement'sclasswitharailshelperorvariable?我已经尝试了所有三种解决方案。不幸的是,对我来说,没有一个在工作。论坛.rb.panel.panel-heading.span=@forum.name.panel-body.row.col-md-7#{t('global.topic')}.col-md-3.value.title.col-md-1.value.topic.col-md-1.value.dateforum_feed.js.coffeewindow.ForumFeedUI

  4. ruby-on-rails - Rails 通过 div 包装有错误的字段 - 2

    当验证未通过时,如何停止Rails更改我的代码。每次rails用包裹我的字段...我可以编辑fields_with_error类.fields_with_error{display:inline}这行得通,但它是hacky 最佳答案 没关系。使用CSS而不是这样做。ActionView::Base.field_error_proc=Proc.newdo|html_tag,instance_tag|"#{html_tag}"end我觉得这更hacky:) 关于ruby-on-rails-R

  5. ruby-on-rails - 使用 Ruby on Rails 将类动态添加到 .erb 中的 div - 2

    我有这个div我想要的结果是有没有办法在我的erb中添加类(class)?我试过了但是当它呈现时,它不会逃逸到ruby​​代码中......和想法? 最佳答案 它与一起%>"> 关于ruby-on-rails-使用RubyonRails将类动态添加到.erb中的div,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3015986/

  6. ruby-on-rails - Date.new 为 `div' :String 返回未定义的方法 "11" - 2

    我遇到了错误undefinedmethod`div'for"11":String"在我提交表单时指向@startdate行。我完全不明白这是怎么回事。如果我在Rails控制台中执行这些步骤,它就可以正常工作。在我的Controller中我有:@startday=params["startday_#{i}".to_sym]@startmonth=params["startmonth_#{i}".to_sym]@startyear=params["startyear_#{i}".to_sym].to_s@endday=params["endday_#{i}".to_sym]@endmont

  7. Educational Codeforces Round 146 (Rated for Div. 2)(B,E详解) - 2

    题外话:抑郁场,开局一小时只出A,死活想不来B,最后因为D题出锅ura才保住可怜的分。但咱本来就写不到DB-LongLegs(数论)本题题解法一学自同样抑郁的知乎作者幽血魅影的题解,有讲解原理。法二来着知乎巨佬cup-pyy(大佬说《不难发现》呜呜)题意三种操作:向上走mmm步向右走mmm步给自己一次走的步数加111,即使得m=m+1m=m+1m=m+1问从(0,0)(0,0)(0,0)走到(a,b)(a,b)(a,b)的最小操作次数,值得注意的是操作三不可逆。解析假设我们最终一步的大小增长到mmm,那么在这个过程中我能以[1,m][1,m][1,m](当步数增长到该数时)之间的任何数字向上或

  8. ruby-on-rails - Rails 仪表板设计 : one controller action per div - 2

    作为Rails的新手(更像是基础设施专家),我正在实现一个仪表板。仪表板将由多个页面组成,每个页面将包含多个图表/表格/等。对于模块化,我希望添加新图表或更改数据View尽可能简单。假设一页有5个不同的图表。我可以让Controller进行5次单独的数据查找,将所有相关数据保存在实例变量中,并呈现5个部分,每个部分都涉及数据的子集。但是看起来更模块化的是有一个“索引”ControllerAction,它的渲染有一堆div,并且对于每个div都有另一个ControllerAction,它进行数据查找并有一个相关的View部分负责管理该数据的View在分区内。因此,如果我要显示包含两个图表

  9. ruby - 你如何在 rspec/capybara 中测试一个 div 是否具有特定的 css 样式? - 2

    如何测试一个div标签是否具有特定的css样式?我正在尝试测试它是否有display:none;或display:block。我尝试了以下但它给了我一个错误:it{shouldhave_selector('signup_server_generic_errors',/display:\s*none/)} 最佳答案 我建议您不要尝试定位css样式,而是编写测试来查找css类名。通过这种方式,您可以更改底层的css样式,同时保持类不变,您的测试仍然会通过。搜索底层样式很脆弱。风格经常变化。将你的rspecs建立在寻找特定样式元素的基础上

  10. javascript - 在特定的 div 中显示 toastr - 2

    我需要在特定的div、类或id中显示toastr消息。默认情况下它是body。我发现我需要改变目标。但我似乎无法让它发挥作用。例如,我想在这个div中显示toastr:这是我使用的代码:toastr.options={"closeButton":false,"debug":false,"newestOnTop":false,"progressBar":false,"positionClass":"toast-top-right","preventDuplicates":false,"onclick":null,"showDuration":"300","hideDuration":"1

随机推荐