Educational Codeforces Round 160 (Rated for Div. 2) 题解A~D
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的更多相关文章
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- Educational Codeforces Round 65 (Rated for Div. 2)题解
Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...
- Educational Codeforces Round 64 (Rated for Div. 2)题解
Educational Codeforces Round 64 (Rated for Div. 2)题解 题目链接 A. Inscribed Figures 水题,但是坑了很多人.需要注意以下就是正方 ...
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...
- Educational Codeforces Round 58 (Rated for Div. 2) 题解
Educational Codeforces Round 58 (Rated for Div. 2) 题目总链接:https://codeforces.com/contest/1101 A. Min ...
- Educational Codeforces Round 47 (Rated for Div. 2) 题解
题目链接:http://codeforces.com/contest/1009 A. Game Shopping 题目: 题意:有n件物品,你又m个钱包,每件物品的价格为ai,每个钱包里的前为bi.你 ...
- Educational Codeforces Round 93 (Rated for Div. 2)题解
A. Bad Triangle 题目:https://codeforces.com/contest/1398/problem/A 题解:一道计算几何题,只要观察数组的第1,2,n个,判断他们能否构成三 ...
- Educational Codeforces Round 33 (Rated for Div. 2) 题解
A.每个状态只有一种后续转移,判断每次转移是否都合法即可. #include <iostream> #include <cstdio> using namespace std; ...
- 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 ...
- Educational Codeforces Round 81 (Rated for Div. 2) 题解
过了n天补的题解:D AB就不用说了 C. Obtain The String 思路挺简单的,就是贪心,但是直接贪心的复杂度是O(|s|*|t|),会超时,所以需要用到序列自动机 虽然名字很高端但是就 ...
随机推荐
- C#开发的基础工具类集合 - 开源研究系列文章
今天发布一个基础工具类代码集合. 以前有发布过一个类似的类库(见博文: Magical平台类库代码分享 ),不过那个版本有点久了,也没有这次这个全面,这次发布的是一个很多地方用到的基础类库代码. 1. ...
- Elasticsearch整合SpringBoot案例
1.elasticsearch官方文档的使用与介绍 1.1.Rest客户端初始化官方文档链接: https://www.elastic.co/guide/en/elasticsearch/client ...
- 使用Springboot+SpringCloud+Seata1.3.0+Nacos1.2.1进行全局事务管理
一.官方文档网址 http://seata.io/zh-cn/docs/overview/what-is-seata.html Seata1.3.0开发组提供的开发文档 二.常见问题 2.1:网址: ...
- 深入解析HTTP请求:了解请求特征与报文格式的关键秘密
引言 在上一章节中,我们详细探讨了超文本传输协议(HTTP)的基本概念,并且延伸讨论了HTTP请求响应的基本流程.在这个过程中,浏览器首先通过DNS解析来确定要访问的服务器的IP地址,然后与服务器建立 ...
- Redis系列23:性能优化指南
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...
- Springboot简单功能示例-6 使用加密数据源并配置日志
springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...
- DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)
前言 继续书接上文 Docker Compose V2 安装常用数据库MySQL+Mongo,部署安装好之后我本来是找了一个web端的在线连接数据库的工具,但是使用过程中并不丝滑,最终还是选择了使用 ...
- Elasticsearch 6.8.6
mac;centos;unix; 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.6. ...
- idea2020.3 安装插件JetBrains 插件市场安装 Cloud Toolkit
<Cloud Toolkit User Guide> 本文是 Alibaba Cloud Toolkit 的使用文档指引,所有相关的使用参考,都可以在本文中找到.如果在使用中有任何问题,请 ...
- 面向生产的 LLM 优化
注意 : 本文同时也是 Transformers 的文档. 以 GPT3/4.Falcon 以及 LLama 为代表的大语言模型 (Large Language Model,LLM) 在处理以人为中心 ...