Educational Codeforces Round 160 (Rated for Div. 2)

A. Rating Increase

纯暴力,分割字符串,如果n1<n2就输出,如果遍历完整个数组都不存在n1<n2就输出-1.

const int N = 2e5 + 10;

int toint(string s)
{
stringstream ss;
ss << s;
int v;
ss >> v;
return v;
} void solve()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
if ((i<s.size()-1 && s[i+1] != '0') || i==s.size()-1)
{
int n1 = toint(s.substr(0, i+1));
int n2 = toint(s.substr(i + 1));
if (n1 < n2)
{
cout << n1 << " " << n2 << endl;
return;
}
}
}
cout << "-1" << endl;
}

B. Swap and Delete

贪心题目,可以先遍历整个字符串,统计0和1的个数,然后再次遍历整个字符串,碰到1就用0填,0就用1填,直到0和1中有一个消耗完,则说明此后所有的字符都应该删掉,答案即为n-i

const int N = 2e5 + 10;

void solve()
{
string s;
cin >> s;
int n1 = 0, n2 = 0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='0') n1++;
else n2++;
}
for(int i=0;i<s.size();i++)
{
if(s[i]=='1') n1--;
else n2--;
if(n1 <0 || n2<0)
{
cout << s.size() - i<<endl;
return;
}
}
cout << 0 << endl;
}

C. Game with Multiset

首先用一个数组存入所有的2的i次方的个数,例如w[2]表示2的2次方的个数,然后每次要验证一个数是否可以由现有的数构成时,先拷贝一份w,然后从低位向高位二进制枚举要合成的数a的每一位(因为低位可以合成高位,但是高位无法分解成低位),如果a的i位为1且w[i]>=1,则将w[i]--(用于合成),并且将w[i]除以二加到他的高一位上去,若w[i]==0,则说明无法合成,输出-1,如果遍历完w数组,则说明可以合成,返回true

int w[32];

void solve()
{
int op,a;
cin >> op >> a;
if(op==1)
{
w[a]++;
}
else
{
int bak[32];
memcpy(bak,w,sizeof w);
for(int i=0;i<31;i++)
{
if(a&1)
{
if(bak[i])
{
bak[i]--;
}
else
{
puts("NO");
return;
}
}
a >>= 1;
if(i<30)
bak[i+1] += bak[i]/2;
}
puts("YES");
}
}

D. Array Collapse

dp,题解看注释

#define int long long
const int N = 3e5 + 10, MOD = 998244353;
//dp(i,0/1)表示是否选择第i个数,last_min(i)表示1~i-1中最接近nums[i]的小于nums[i]的数的下标,sum[i]表示前i个数中可达数组的sum
int dp[N][2], last_min[N], sum[N];
int nums[N];
int n; void solve()
{
cin >> n;
for (int i = 1; i <= n; i++) //初始化
{
cin >> nums[i];
last_min[i] = 0;
sum[i] = 0;
dp[i][0] = dp[i][1] = 0;
}
stack<int> stk; //单调栈,用于处理last_min
for (int i = 1; i <= n; i++)
{
while (stk.size() && nums[stk.top()] > nums[i]) //如果栈顶大于nums[i]则全部pop
stk.pop();
if (stk.size()) //如果栈顶存在小于nums[i]的数,那么他一定是最接近nums[i]的数
last_min[i] = stk.top();
stk.push(i); //入栈
}
dp[0][0] = 1;
sum[0] = 1;
for (int i = 1; i <= n; i++)
{
if (last_min[i]) //如果存在比nums[i]小的数
{
//如果要选nums[i],那么应该减去包含last_min[i]的部分(因为如果存在last_min[i],肯定不存在nums[i],
//因为last_min[i]一定比nums[i]小,这会导致nums[i]一定会被删掉)
//同时如果不包含last_min[i]了,还应该加上不选last_min[i]的数量,也就是dp[last_min[i]][0]
dp[i][1] = (sum[i - 1] - sum[last_min[i] - 1] + dp[last_min[i]][0] + MOD) % MOD;
//如果不选nums[i],则说明肯定选了last_min[i]或者更小的部分,因此直接加上last_min的全部情况即可
dp[i][0] = (dp[last_min[i]][1] + dp[last_min[i]][0]) % MOD;
}
else //如果不存在比nums[i]小的数,则说明nums[i]一定可以选上,而且相当于方案数就是sum[i-1]
{
dp[i][1] = sum[i - 1];
}
//累加方案总数
sum[i] = (sum[i - 1] + dp[i][1]) % MOD;
}
cout << (dp[n][0] + dp[n][1]) % MOD << endl;
}

Educational Codeforces Round 160 (Rated for Div. 2) 题解A~D的更多相关文章

  1. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  2. Educational Codeforces Round 65 (Rated for Div. 2)题解

    Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...

  3. Educational Codeforces Round 64 (Rated for Div. 2)题解

    Educational Codeforces Round 64 (Rated for Div. 2)题解 题目链接 A. Inscribed Figures 水题,但是坑了很多人.需要注意以下就是正方 ...

  4. Educational Codeforces Round 60 (Rated for Div. 2) 题解

    Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...

  5. Educational Codeforces Round 58 (Rated for Div. 2) 题解

    Educational Codeforces Round 58 (Rated for Div. 2)  题目总链接:https://codeforces.com/contest/1101 A. Min ...

  6. Educational Codeforces Round 47 (Rated for Div. 2) 题解

    题目链接:http://codeforces.com/contest/1009 A. Game Shopping 题目: 题意:有n件物品,你又m个钱包,每件物品的价格为ai,每个钱包里的前为bi.你 ...

  7. Educational Codeforces Round 93 (Rated for Div. 2)题解

    A. Bad Triangle 题目:https://codeforces.com/contest/1398/problem/A 题解:一道计算几何题,只要观察数组的第1,2,n个,判断他们能否构成三 ...

  8. Educational Codeforces Round 33 (Rated for Div. 2) 题解

    A.每个状态只有一种后续转移,判断每次转移是否都合法即可. #include <iostream> #include <cstdio> using namespace std; ...

  9. Educational Codeforces Round 78 (Rated for Div. 2) 题解

    Shuffle Hashing A and B Berry Jam Segment Tree Tests for problem D Cards Shuffle Hashing \[ Time Lim ...

  10. Educational Codeforces Round 81 (Rated for Div. 2) 题解

    过了n天补的题解:D AB就不用说了 C. Obtain The String 思路挺简单的,就是贪心,但是直接贪心的复杂度是O(|s|*|t|),会超时,所以需要用到序列自动机 虽然名字很高端但是就 ...

随机推荐

  1. mall :rabbit项目源码解析

    目录 一.mall开源项目 1.1 来源 1.2 项目转移 1.3 项目克隆 二.RabbitMQ 消息中间件 2.1 rabbit简介 2.2 分布式后端项目的使用流程 2.3 分布式后端项目的使用 ...

  2. MediaBox助力企业一站式获取音视频能力

    以一只音视频百宝箱,应对「千行千面」. 洪炳峰.楚佩斯|作者 大家好,今天我分享的主题是MediaBox--行业音视频数字化再加速. 根据权威数据表明,65%的行业数字化信息来自视频,基于此,音视频技 ...

  3. SQL Server更改表字段顺序和表结构

    1.首先打开SqlServer,SSMS可视化工具.点击工具,再点选项. 2.在弹出的选项窗口中,点击Desinners,点击表设计和数据库设计器,将阻止保护勾去掉.点"确定" 3 ...

  4. 使用Debian 11基础镜像制作java8镜像

    下面是dockerfile内容: FROM debian:bullseye # 切换apt源为清华源,并安装vim ping telnet命令 RUN apt-get update && ...

  5. 如何在没有第三方.NET库源码的情况,调试第三库代码?

    大家好,我是沙漠尽头的狼. 本方首发于Dotnet9,介绍使用dnSpy调试第三方.NET库源码,行文目录: 安装dnSpy 编写示例程序 调试示例程序 调试.NET库原生方法 总结 1. 安装dnS ...

  6. 2023年最新版Apollo保姆级使用手册(超级详尽版本)

    目录 Apollo操作说明 前言 Apollo环境部署 一.环境构建 二.官方地址 三.数据库脚本使用 四.配置Apollo文件 五.启动Apollo 六.访问Apollo Apollo产品使用 一. ...

  7. Debian12安装.NET7 SDK

    Debian,作为最受欢迎的 Linux 发行版之一,于 2023 年 6 月 10 日正式发布了其最新版本 Debian 12,代号"Bookworm".Debian 12 带来 ...

  8. python3 gui 计时器

    # -*- coding: utf-8 -*- # @Time : 2023/4/4 21:53 # @File : 定时器gui.py # @Software: PyCharm Community ...

  9. svn: E200007: Retrieval of mergeinfo unsupported解决

     http://blog.csdn.net/intlgj/article/details/39080605 svn: E200007: Retrieval of mergeinfo unsupport ...

  10. .NET静态代码织入——肉夹馍(Rougamo)发布2.0

    肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应 ...