Educational Codeforces Round 118 (Rated for Div. 2)

A:Long Comparison

  比较两个添加零的大整数的大小,直接对情况进行判断即可。

B:Absent Remainder

  给定一个包含有 n n n个数的数列,你需要找到 ⌊ n 2 ⌋ \lfloor \frac{n}{2} \rfloor 2n对整数 x , y x,y x,y,满足 x , y x,y x,y出现在序列中但是 x   m o d   y x\ mod\ y x mod y不出现在原序列中。很简单的构造题,找到一个序列中最小的数 m i n n u m minnum minnum,序列中所有的数模它都小于 m i n n u m minnum minnum,可以构造出 n − 1 n-1 n1对,对于 2 ≤ n ≤ 2 e 5 2\le n\le 2e5 2n2e5来说显然满足题意。

C:Poisoned Dagger

  给定一个时间序列,代表毒药发挥作用的时间,记两个时间点的间隔是 g a p gap gap,每秒毒药都会造成一点伤害,因此每个时间点到下个时间点毒药造成的伤害是 m i n ( g a p , k ) min(gap,k) min(gap,k),其中 k k k是毒药能持续的时间,求能够达到给定伤害值 h h h的最小的 k k k值。很明显二分,然后检查能不能满足题意的伤害即可。

D:MEX Sequences

  给定一个序列,你需要找到有多少个子序列 x 1 , x 2 , . . . , x k x_1,x_2,...,x_k x1,x2,...,xk能够满足 ∣ x i − M E X ( x 1 , x 2 , . . . , x i ) ∣ ≤ 1 ( 1 ≤ i ≤ k ) |x_i-MEX(x_1,x_2,...,x_i)|\le1(1\le i\le k) xiMEX(x1,x2,...,xi)1(1ik).一个很有意思的DP,我们发现只有两种序列能够满足上述题意:①该序列的最大值是 x x x,同时 0 , 1 , 2... , x − 1 , x 0,1,2...,x-1,x 0,1,2...,x1,x都按序出现;②该序列的最大值是 x x x,同时 0 , 1 , 2... , x − 2 0,1,2...,x-2 0,1,2...,x2都按序出现,但缺少 x − 1 x-1 x1。令 d p [ x ] [ 0 / 1 ] dp[x][0/1] dp[x][0/1]表示最大值为 x x x的两种序列。设当前需要被处理的数是 a a a,很明显,他可以跟在最大值为 a , a − 1 a,a-1 a,a1的一号序列后面形成一号序列,可以跟在 a + 2 a+2 a+2的二号序列后面或者 a − 2 a-2 a2的一号序列后面形成二号序列。注意0和1的特判,0可以只选自己形成一号序列,1可以只选自己形成二号序列。

#include<bits/stdc++.h>
#define close ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const int maxn=5e5+100;
const int mod=998244353;
ll dp[maxn][2];
int main()
{
    close;int T;cin>>T;
    while(T--){
        int n;cin>>n;
        for(int i=0;i<=n;++i) dp[i][0]=dp[i][1]=0;
        for(int i=1;i<=n;++i){
            int x;cin>>x;
            if(x==0) dp[0][0]=dp[0][0]<<1|1,dp[0][1]=0;
            else if(x==1) dp[1][0]+=dp[1][0]+dp[0][0],dp[1][1]=dp[1][1]<<1|1;
            else{
                dp[x][0]+=dp[x][0]+dp[x-1][0];
                dp[x][1]+=dp[x][1]+dp[x-2][0];
            }
            dp[x+2][1]<<=1;dp[x+2][1]%=mod;
            dp[x][0]%=mod;dp[x][1]%=mod;
        }
        ll ans=0;
        for(int i=0;i<=n;++i) ans=(ans+dp[i][0]+dp[i][1])%mod;
        cout<<ans<<"\n";
    }
}

E:Crazy Robot

  对于一个 n × m n×m n×m的二维矩阵,‘#’代表障碍,’.'代表空地,‘L’代表终点。有一个机器人,只能按照上下左右的方向行走,而且规定:每次用户给定一个方向,机器人都会随机的选择一个另外三个方向中能够行走的一个方向前进一步,否则就原地保持不动。问机器人从地图上的哪些空地出发一定能够按照上述规则到达终点。简单BFS,总结起来就一句话:想让机器人一定能够朝某个方向走一步(该方向可达),当且仅当机器人只能在最多两个可达的行走方向中做出选择.

#include<bits/stdc++.h>
#define close ios::sync_with_stdio(false)
#define PII pair<int,int>
using namespace std;
typedef long long ll;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};int n,m;
bool Judge(int x,int y){
    if(x>=1 && x<=n && y>=1 && y<=m) return true;
    return false;
}
int main()
{
    close;int T;cin>>T;
    while(T--){
        cin>>n>>m;int sx,sy;
        vector<vector<char> > mp(n+10,vector<char>(m+10));
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j){
                cin>>mp[i][j];
                if(mp[i][j]=='L') sx=i,sy=j;
            }
        }
        queue<PII> Q;while(!Q.empty()) Q.pop();
        for(int i=0;i<4;++i) if(Judge(sx+dx[i],sy+dy[i]) && mp[sx+dx[i]][sy+dy[i]]=='.') Q.push(PII(sx+dx[i],sy+dy[i]));
        while(!Q.empty()){
            PII cur=Q.front();Q.pop();int num=0;
            for(int i=0;i<4;++i) if(Judge(cur.first+dx[i],cur.second+dy[i]) && mp[cur.first+dx[i]][cur.second+dy[i]]=='.') num++;
            if(num<=1){
                mp[cur.first][cur.second]='+';
                for(int i=0;i<4;++i) if(Judge(cur.first+dx[i],cur.second+dy[i]) && mp[cur.first+dx[i]][cur.second+dy[i]]=='.') Q.push(PII(cur.first+dx[i],cur.second+dy[i]));
            }
        }
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j)
                cout<<mp[i][j];
            cout<<"\n";
        }
    }
}

F:Tree Coloring

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值