vp Educational Codeforces Round 152 (Rated for Div. 2)|“朝闻道”知识分享大赛

给小猫咪顺毛 2023-12-31 18:07:33

这是我参加朝闻道知识分享大赛的第30篇文章.

这段时间都没怎么写过代码,也没补过题,,

Problem - C - Codeforces

其实赛时想到了想法,写了一遍没过就换下一题了,但是下一题也wa了()

可以发现左端点左边的0对排序无影响,因为排序后0恒在左端;同理,右端点右边的1对排序无影响。

所以预处理序列,找到0的右端第一个不为0的位置,1的左端第一个不为1的位置,将区间缩短。注意处理边界。

,,调了无数遍才调出来,,有毒

#include<bits/stdc++.h>

using namespace std;

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

#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define _cf() int _;cin>>_;while(_--)

inline ll read(){char c=getchar();ll x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f;}

const int N = 2e6;
const int inf = 2147483647;

//乘法一定要注意会不会爆!!!

void Solve()
{
    int n,m;
    cin>>n>>m;
    vector<char> a(n+1);
    vector<int> pre(n+1),suf(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    pre[1]=0,suf[n]=n+1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]=='0') pre[i]=i;
        else
        {
            if(a[i-1]=='0') pre[i]=i-1;
            else pre[i]=pre[i-1];
        }
        
    }
    for(int i=n-1;i>0;i--)
    {
        if(a[i]=='1') suf[i]=i;
        else
        {
            if(a[i+1]=='1') suf[i]=i+1;
            else suf[i]=suf[i+1];
        }
    }
    set<PII> s;
    int x,y;
    while(m--)
    {
        cin>>x>>y;
        if(suf[x]>pre[y]) s.insert({-1,-1});
        else s.insert({suf[x],pre[y]});
    }
    cout<<s.size()<<endl;
}

int main()
{
    IOS;
    _cf()
    Solve();
}

Problem - D - Codeforces

又是一题模拟,就是没想清楚,,,服了,补题就一发过

记录每个不含0的区间,如果区间里有2就两边都可以染色,全1的区间就选一个端点染色,先处理含2的区间。

#include<bits/stdc++.h>

using namespace std;

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

#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define _cf() int _;cin>>_;while(_--)

inline ll read(){char c=getchar();ll x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f;}

const int N = 2e6;
const int inf = 2147483647;

//乘法一定要注意会不会爆!!!

void Solve()
{
    int n;
    cin>>n;
    vector<int> a(n+2);
    vector<PII> a1,a2;
    for(int i=1;i<=n;i++) cin>>a[i];
    int l=-1,op=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i]>0)
        {
            if(a[i]==2) op=1;
            if(a[i-1]==0)l=i;
            if(a[i+1]==0)
            {
                if(op==1)
                {
                    a2.push_back({l,i});
                    op=0;
                }
                else a1.push_back({l,i});
            }
        }
    }
    for(auto t:a2)
    {
        int l=t.first,r=t.second;
        a[l-1]=-1;a[r+1]=-1;
    }
    for(auto t:a1)
    {
        int l=t.first,r=t.second;
        if(a[l-1]==0&&l-1>0) a[l-1]=-1;
        else a[r+1]=-1;
    }
    int cnt=a1.size()+a2.size();
    for(int i=1;i<=n;i++) if(a[i]==0) cnt++;
    cout<<cnt<<endl;
}

int main()
{
    IOS;
    //_cf()
    Solve();
}

E题有时间再补吧(好像一次没补完的都没去补了())

...全文
57 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

858

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧