草庐IT

Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D 题解

yahh 2023-04-17 原文

A. Two 0-1 Sequences

 大致翻译:

两个长度为n和m的二进制序列a和b(题目保证n >= m)

两个操作:

op1: 改变a(2) 为min(a(1), a(2)),并且移除a(1)

op2: 改变a(2) 为max(a(1), a(2)),并且移除a(1)

每次操作后,原先的a(i)变成a(i + 1), 长度减少1,即前移。

  a二进制序列能否通过这两个操作变成b二进制序列?

解题思路:刚开始想的是判断a2后缀跟a1后缀是否相同,再判断,a1前面有没有1和0(因为有1和0,就表示op1和op2可以随意完成)。写的时候又陆陆续续发现需要几个特判,想a1长度为1等。

于是就debug,慢慢发现只要前面有a2的第一个数字,并且后缀相同就可以对了。最终写出来了。

不过我写的查找是自己造轮子,我发现大佬就是用stl中的count()来写的,就拿过来改进了改进自己的code

#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stdio.h>
#include <algorithm>
using namespace std;
 
#define rep(i,x,n) for(int i = x; i <= n; i++)
 
typedef long long LL;
typedef pair<int,int> PII;
 
const int N = 10021;
 
void solve() {
    int n, m;
    cin>>n>>m;
    string a, b;
    cin>>a>>b;
    if(a.substr(n-m+1) == b.substr(1) && count(a.begin(), a.begin() +n - m + 1, b[0])) {
        puts("YES");
    } else puts("NO");
}
void test();
int main()
{
    int n;
    cin>>n;
    while(n--) solve();
 
    return 0;
}

B. Luke is a Foodie

  大致翻译:

对于a数组中的每一个元素,满足 |v−ai|≤x, (x是固定的值,由题目给出, v是可以变化调动的值)

问最少需要调动几次v,才能使得a数组中所有元素满足|v−ai|≤x

解题思路:

用数组的话存不下1e9+21的int型,而且题目是要找改了几次v。由|v- ai| <= x这个可以发现,区间差的最大值小于二倍的x范围内,v就不会改。因此发现存max,min,每次相减,判断是否满足在范围内,满足不改,不满足将max,min赋值为k(读入值)

#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stdio.h>
#include <algorithm>
using namespace std;
 
#define rep(i,x,n) for(int i = x; i <= n; i++)
 
typedef long long LL;
typedef pair<int,int> PII;
 
//const LL N = 1e9+21;
//LL arr[N];
void test();
int main()
{
    //test();
    LL t;
    cin>>t;
    while(t--) {
        LL n,x;
        scanf("%lld %lld", &n, &x);
        LL cnt = 0;
        LL ma, mi;
        scanf("%d", &ma);
        mi = ma;
        rep(i,2,n) {
            LL k;
            scanf("%lld", &k);
            if(mi > k) mi = k;
            if(ma < k) ma = k;
            if(abs(ma - mi) <= 2*x) {;}
            else {
                cnt++;
                ma = k;
                mi = k;
            }
        }
        printf("%lld\n",cnt);
    }
 
    return 0;
}
 

C. Virus

  大致翻译:

一个圆圈内有n个房子(编号为:1、 2、 3 …… n 、 1),最初,其中的m个房子被感染了,每天被感染的房子会感染其相邻的房子(该房子未被感染或未被保护).Cirno每天可以选择一个房子保护,使他永久免疫。问Cirno在最合理的操作下,使房子感染数量最少, 输出最终房屋感染的数量。

解题思路:n跟m较大,即开n数组会溢出,那么就先从m下手。由于是形成一个 ⚪ ,第几个第几个房子就不是那么重要,谁都可以从第一个开始。想一想,要想求最小感染房子,那反过来就是最大未感染房子(正难反易)。最大未感染房子个数,这个... 。 由于每一天房子都会有被感染的可能,怎么就最大未感染房子个数( •̀ ω •́ )y,当然是从两个感染房子间隔最大的先开始咯,从两个感染房子间隔最大的先开始,堵住一个后,第二天感染,未堵住的会向内(当然还有外)感染,然后堵住那个未堵住的房子,一个间隔用两天。通过递增减去4倍的i,可以得到到它时,还有几个未被感染。

里面有一些细节,例如怎么得到第一个跟最后一个的间隔,怎么让间隔由大到小去计算。

 

 

 

#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stdio.h>
#include <algorithm>
using namespace std;

#define rep(i,x,n) for(int i = x; i <= n; i++)

typedef long long LL;
typedef pair<int,int> PII;

const int N = 100021;
int arr[N];
int diff[N];
void test();
int main()
{
    test();
    int t;
    scanf("%d", &t);
    while(t--) {
        int n,m;
        scanf("%d %d", &n, &m);
        rep(i,1,m) {
            scanf("%d", &arr[i]);
        }
        sort(arr+1, arr+m+1);
        diff[1] = arr[1] - 1 + n - arr[m];
        rep(i,2,m) diff[i] = arr[i] - arr[i-1] - 1;
        sort(diff+1, diff+m+1, greater<int>());
        int ans = 0;
        rep(i,1,m) {
            diff[i] -= 4*(i-1); // 每次两天,一前一后,形成永久隔离,那么里面的自然而然就是不会被感染的了
            if(diff[i]) {
                n -= (diff[i] == 1?1:(diff[i]-1));
            }
            
        }
        cout<<n<<endl;
    }


    return 0;
}

void test() {
    #define mytest
    #ifdef mytest
    freopen("ANSWER.txt", "w",stdout);
    #endif
}

D. Magical Array

  大致翻译:

定义一个特殊行,执行操作2,其它行执行操作1(执行次数都至少有一次)

给出这些行,让你输出那个是特殊行,以及特殊行操作2的次数。

解题思路:前缀和和差分,思路简单。

学到了 min_element() max_element()

#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stdio.h>
#include <algorithm>
#include <cstdlib>
#include <memory.h>
using namespace std;

#define rep(i,x,n) for(int i = x; i <= n; i++)

typedef long long LL;
typedef pair<int,int> PII;

const int N = 100021;
LL arr[N];
void test();
int main()
{
    //test();
    int t;
    cin>>t;
    while(t--) {
        int n, m;
        scanf("%d %d", &n, &m);
        for(int i = 0; i < n; ++i) {
            LL pre = 0;
            for(int j = 1; j <= m; ++j) {
                LL x;
                scanf("%lld", &x);
                pre += x;
                arr[i] += pre;
            }
        }
        LL mx = *max_element(arr+0, arr+n);
        LL mi = *min_element(arr+0, arr+n);
        cout<< min_element(arr+0, arr+n) - arr + 1<<" "
            <<mx - mi<<endl;
            memset(arr, 0, sizeof(arr));
    }
   

    return 0;
}

void test() {
    #define mytest
    #ifdef mytest
    freopen("ANSWER.txt", "w",stdout);
    #endif
}

总结:学了几个stl

count() --  返回个数 max_element()  min_element()  --  返回迭代器或地址(数组)。

第一次做codeforces,写的时候太着急了,有些题没理解透彻或者复杂化了,A题用时较长。

加油!!!

有关Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D 题解的更多相关文章

  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. 【算法题解】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

  8. 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](当步数增长到该数时)之间的任何数字向上或

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

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

  10. 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建立在寻找特定样式元素的基础上

随机推荐