草庐IT

CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) 题解

Meteor的博客 2023-03-28 原文

CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) 题解

A-Two 0-1 Sequences

题意:有两个字符串\(a和b\),都是\(01\)字符串,可以进行一下操作看是否可以将\(a\)变成\(b\),设\(a_1\)\(a_2\) 表示的是字符串\(a\)的第一个字母和字母

  1. 在满足可以操作的前提下,将\(a_2\)变成\(max(a_1,a_2)\),并将\(a_1\)删去
  2. 在满足可以操作的前提下,将\(a_2\)变成\(min(a_1,a_2)\),并将\(a_1\)删去,

思路: 删去的时候肯定不能让字符串\(a\)的大小<字符串\(b\)的大小,并且得知后面的字符串一定要相同,否则不能满足题意,但是字符串\(b\)的第一个字母是可以和\(字符串a\)与之对应的第一个字母不相同的,因为可以通过操作\(1\)\(2\)进行变化,将如果缺少\(1\) 那么可以用前面的操作将\(a\)中的\(1\)挪到\(b\)中对应的位置上

code:

#include <bits/stdc++.h>
using namespace std;
void solve()
{
    int aa,bb;
    cin>>aa>>bb;
    string a,b;
    cin>>a>>b;
    if(aa<bb)//如果大小小的话,直接NO
    {
        cout<<"NO"<<'\n';
        return;
    }
    if(aa==bb)
    {
        if(a==b) cout<<"YES"<<'\n';//特殊判断
        else cout<<"NO"<<'\n';
    }else
    {
        for(int i=aa-1,j=bb-1;j>=1;i--,j--)//判断后面的单词是否一样
        {
            if(a[i]!=b[j])
            {
                cout<<"NO"<<'\n';
                return;
            }
        }
        // debug(a.size()-b.size()+1);
        for(int i=0;i<a.size()-b.size()+1;i++)//判断前面的单词是否有与之对应的1或者0就可以了
        {
            if(a[i]==b[0])
            {
                cout<<"YES"<<'\n';
                return;
            }
        }
        cout<<"NO"<<'\n';
    }
}
int main()
{
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0^0;
}

B-Luke is a Foodie

题意:一串数字,只能挨着吃,当且仅当\(|a_i-x| \le k\) 才可以吃掉,\(x\)当前自己的分数, \(a_i\)是数字,\(k\)是临界值,开头可以自己设置任意值,但是之后每一次改变自己的\(x\)都会导致\(ans\)++,问\(ans\)的最小值是多少

题解:考虑贪心:吃的是一个范围,所以说我们可以找到一个值,使他能够横穿而过,这个时候就是最优解,然后再判断当前是否可以横穿而过,如果不能,那么就重新写这个范围,如果能,贼可以缩小这个范围

红线的就是能走的范围,如果不能,就只有两种情况,可以直接哦判断,然后设置范围!

code

#include <bits/stdc++.h>
void solve()
{
    int n,k;
    cin>>n>>k;
    int ans=0;
    vector<ll> q(n);
    
    for(int i=0;i<n;i++) cin>>q[i];
    ll maxn=q[0]+k;//一开始的最大值
    ll minn=q[0]-k;//一开始的最小值
    for(int i=1;i<n;i++)
    {
        if(q[i]-k>maxn||q[i]+k<minn)
        {
            ans++;//如果不在这个范围内,就重新设置范围,并且ans++
            maxn=q[i]+k;
            minn=q[i]-k;
        }else
        {
            maxn=min(maxn,q[i]+k);//缩小范围
            minn=max(minn,q[i]-k);
        }
    }
    cout<<ans<<'\n';
}
int main()
{
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0^0;
}

C-Virus

题意:\(n\)个村庄首尾相连,然后有初始化\(k\)个点是一开始感染的,然后每一天就会向外边感染其他没有未被感染的村庄(必须是相邻的),可以在每一天的开始保护一个村庄永远不会感染,然后可以隔绝其他的村庄感染,然后问你最后感染的最小值

可以考虑贪心.对于一个间隔,我们可以直接保护最左端点和最右端点,然后中间的端点就不会感染,这样我们能保护的村庄就是最优的.可以先对没有感染的排序一下,从大到小贪心的做一下

code

#include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
void solve()
{
    int n,k;
    cin>>n>>k;
    vector<ll> q(k);
    for(int i=0;i<k;i++) cin>>q[i];
    sort(all(q));
    vector<ll> s;
    for(int i=1;i<k;i++)
    {
        if(q[i]-q[i-1]-1>0) s.push_back(q[i]-q[i-1]-1);//如果间隔是大于0的,那么就加入
    }
    if(n-q[k-1]+q[0]-1>0) s.push_back(n-q[k-1]+q[0]-1);//加入收尾相连的那个
    sort(all(s),cmp);
    if(s.size()==0)//特判
    {
        cout<<n<<'\n';
        return;
    }
    ll ans=0;//表示没有被污染的点
    ll day=0;
    for(int i=0;i<s.size();i++)
    {
       s[i]-=day;//减去以前累计的
       if(s[i]>0) ans++;
       else if(s[i]<=0) break;
        s[i]--;
       day+=4;//相当于两天,+4就是这个间隔污染了4个
       if(s[i]>=1) ans+=(s[i]-1);//因为上面加了一个了,而且这一天最多污染1个,所以这样判断
       
        
        
    }
    cout<<n-ans<<'\n';
}
int main()
{
    IOS;
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0^0;
}

D-Magical Array

题意:初始化有\(n\)个数组,对于其中\(n-1\)个数字进行操作\(1\),对于一个特殊的数组进行操作\(2\);

操作1:选择\((i,j)\) 然后可以使得\(a[i-1]+=1,a[i]-=1,a[j]-=1,a[j+1]+=1\).
操作2:选择\(i,j\),然后使得\(a[i-1]+=1,a[i]-=1,a[j]-=1,a[j+2]+=1\)
然后问你是哪一个特殊的数组,并且进行了几次操作?

题解:我们对于这些数字进行前缀和,但是这里是进行两次前缀和,这样就能表现出一定的差异,是因为操作\(1\)和操作\(2\)会虽然第一次对于前缀和没有一定的改变,但是他 操作2会对\(a[i+2]+=1\),这时候相当与对于他的前缀和进行一定的右移,并且可以对于第二次前缀和一定的影响,所以说进行两次前缀和,然后搞差距,那个差距就是进行操作2的不同数量,然后那个不同的是多少

code

#include <bits/stdc++.h>
using namespace std;
void solve()
{
    int n,m;
    cin>>n>>m;
    vector<vector<ll>> s(n+1,vector<ll>(m+1,0));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) cin>>s[i][j];
    for(int k=0;k<2;k++)
    {
        for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    s[i][j]+=s[i][j-1];//进行两次的前缀和
    }
    vector<int> p(n+1);
    for(int i=1;i<=n;i++) p[i]=i;
    for(int i=1;i<=100;i++)//暴力循环判断100便,因为要找到1一个不同,所以随机判断前两个是相同的话,就是对的,这里随机了,事件复杂度不是很大,感觉近乎O(1)(
    {
        random_shuffle(p.begin()+1,p.end());
        int a=p[1];
        int b=p[2];
        if(s[a][m]==s[b][m])
        {
            for(int i=1;i<=n;i++)
            {
                if(s[i][m]!=s[a][m])
                {
                    cout<<i<<' '<<s[a][m]-s[i][m]<<'\n';
                    return;
                }
            }
        }
    }
}
int main()
{
    int T=1;
    while(T--) solve();
    return 0^0;
}

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

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

随机推荐