A. Vasya and Coins

题目链接

题目大意

Vasya 有 a 个 1-burle coin,有 b 个 2-burle coin,问他不能通过不找钱支付的价格的最小值。

思路

如果 a 不为 0,从 1 ~ a + b * 2 中的所有价格都可以经过组合进行支付,因此最小不能支付的价格为 a + b * 2 + 1;如果 a 为 0,不论 2-burle coin 有几个,都无法表示 1 这个价格,因此最小不能支付的价格为 1。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 5050; int main()
{
int t;
cin >> t;
while (t--)
{
int a, b;
cin >> a >> b;
if (a == 0)
cout << 1 << endl;
else
cout << b * 2 + a + 1 << endl;
}
return 0;
}

B. Vlad and Candies

题目链接

题目大意

给定一个序列,第 i 个位置代表第 i 种糖果的数量,每次吃糖果只能吃当前数量最多的糖果,并且每次相邻两次只能吃不同种类的糖果,问是否能够吃完所有糖果。

思路

考虑数量最多的糖果,第一次选择这种糖果,第二次就需要选择其它糖果,因此如果数量最多的这种糖果的数量比数量第二多的糖果的数量 + 1 还多,那么第二

次只能吃数量最多的这种糖果,但又不能两次吃相同的糖果,因此一定吃不完所有糖果。反之一定能通过这两种糖果控制其它糖果的数量,从而吃掉所有糖果。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 5050; int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int s[n + 2];
int ma1 = 0, ma2 = 0;
for (int i = 1; i <= n; i++)
{
int a;
cin >> a;
if (a > ma1)
{
ma2 = ma1;
ma1 = a;
}
else if (a == ma1)
ma2 = a;
else if (a > ma2)
ma2 = a;
}
if (n == 1)
{
if (ma1 == 1)
cout << "YES\n";
else
cout << "NO\n";
}
else
{
if (ma1 - ma2 <= 1)
cout << "YES\n";
else
cout << "NO\n";
}
}
return 0;
}

C. Get an Even String

题目链接

题目大意

定义偶字符串满足 1.长度为偶数;2.对于字符串中每个奇数位置 。(空字符串也是偶字符串),求给定字符串最少去掉几个字符能得到偶字符串。

思路

考虑贪心,找每次第一对出现的相同字符,然后将之间的所有字符抛弃,可以发现这样处理之后,后面剩下的字符中才更有机会找到相同字符。如 aefebfaf,从前往后扫,最先匹配到的是 e,然后抛掉 f 和开头的 a,剩下 bfaf 再匹配到 f,抛掉 a 和开头的 b,因此最终删除的是 4 个字符。再看看先匹配 a 的情况,就需要删除 6 个字符,先匹配 f 的情况也是删除 6 个字符,然后将匹配成功一此计数器加2,总数减去计数器就可以得到答案。
代码

#include <bits/stdc++.h>
using namespace std;
const int N = 200;
map<char, int> ma;
int main()
{
int t;
cin >> t;
while (t--)
{
string s;
cin >> s;
int cnt = 0;
for (int i = 0; i < s.size(); i++)
{
if (ma[s[i]] != 0)
{
cnt += 2;
ma.clear();
}
else
ma[s[i]] ++;
}
cout << s.size() - cnt << endl;
ma.clear();
} return 0;
}

D. Maximum Product Strikes Back

题目链接

题目大意

给定一个序列 a(其中),定义序列的乘积为序列中每个数相乘的值(空序列的乘积定义为 1),每次可以从最左端或最右端删除元素,问从左、右各删除几个元素能够使得序列乘积最大。

思路

由于 ,空序列值为 1,那么可以把 0 作为分隔符,将每一段的负数个数控制成偶数个(如果是奇数个就比较删除到最左边的一个负数和删除到最右边的一个负数,剩下的序列值的大小,保留较大的一种情况),然后比较每一段的乘积值,由于只有 2 和 -2 对乘积值有贡献,只要计算每段中 abs() = 2 的数个数,最多的即为答案序列,再通过答案序列左右端点可以得到左右删除的元素个数。

代码

#include<bits/stdc++.h>
using namespace std; const int N = 1000010; int a[N], b[N]; int n;
int ans_x, ans_y, cnt; void upd(int l, int r) // 更新答案的值
{
if (l > r) return;
int t = 0;
for (int i = l;i <= r;i ++)
{
if (abs(a[i]) == 2) t ++;
}
if (t > cnt)
{
cnt = t;
ans_x = l - 1;
ans_y = n - r;
}
} int calNeg(int l, int r) // 计算区间内有多少负数
{
int t = 0;
for (int i = l;i <= r;i ++) if (a[i] < 0) t ++;
return t;
} void cal(int l, int r) // 计算这个区间
{
int t = calNeg(l, r); // 如果区间内负数个数为偶数,则这个区间应全部保留
if (t % 2 == 0) upd(l, r);
else
{
int id = l;
while(a[id] > 0) id ++; // 计算第一个负数的下标
upd(l, id - 1); // 取这个负数的前一段
upd(id + 1, r); // 和后一段分别计算
id = r;
while(a[id] > 0) id --; // 计算最后一个负数的下标
upd(l, id - 1); // 取这个负数的前一段
upd(id + 1, r); // 和后一段分别计算
}
} int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int m;
cin >> m; while (m --)
{
cin >> n;
for (int i = 1;i <= n;i ++) cin >> a[i]; a[n + 1] = 0; // 特别设置 n+1 的位置为 0
ans_x = n; // 删除前缀的长度
ans_y = 0; // 删除后缀的长度
cnt = 0; for (int i = 1, j = 1;i <= n + 1;i ++)
{
if (a[i] == 0) // 以 0 分隔每一段
{
if (i - 1 >= j) cal(j, i - 1); // 只要不是连续的 0,就计算
j = i + 1; // j为下一段的左端点
}
} cout << ans_x << ' ' << ans_y << endl;
} return 0;
}

Codeforces Round #780 (Div. 3)的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. sqlmap源码分析(一)

    Sqlmap源码分析(一) 此次分析的sqlmap目标版本为1.6.1.2#dev 只对sqlmap的核心检测代码进行详细分析其他的一带而过 sqlmap.py文件结构 为了不让篇幅过长下面只写出了s ...

  2. Java 线程安全 与 锁

    Java 线程安全 与 锁 多线程内存模型 线程私有栈内存 每个线程 私有的内存区域 进程公有堆内存 同一个进程 共有的内存区域 为什么会有线程安全问题? 多个线程同时具有对同一资源的操作权限,又发生 ...

  3. 利用QEMU+GDB搭建Linux内核调试环境

    前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...

  4. 攻防世界-MISC:hit-the-core

    这是攻防世界MISC高手进阶区的题目,题目如下: 点击下载附件一,解压后得到一个后缀为.core的文件,用string分离一下,得到如下结果: 通过观察发现,每隔四个小写字母就可以看到一个大写字母,刚 ...

  5. 修改本地仓库Maven,设置镜像

    修改本地仓库的位置: 先建立 文件路径: 进入文件夹目录: 就可以看到一个配置文件夹 就在里面修改本地仓库的路径,设置阿里云镜像 添加本地阿里云镜像: 如下图: 内容如下: <mirror> ...

  6. NLP教程(4) - 句法分析与依存解析

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  7. [数学基础] 4 欧几里得算法&扩展欧几里得算法

    欧几里得算法 欧几里得算法基于的性质: 若\(d|a, a|b\),则\(d|(ax+by)\) \((a,b)=(b,a~mod~b)\) 第二条性质证明: \(\because a~mod~b=a ...

  8. 深入HTTP请求流程

    1.HTTP协议介绍 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,它是从WEB服务器传输超文本标记语言(HTML)到 ...

  9. 精华!一张图进阶 RocketMQ

    前 言 大家好,我是三此君,一个在自我救赎之路上的非典型程序员. "一张图"系列旨在通过"一张图"系统性的解析一个板块的知识点: 三此君向来不喜欢零零散散的知识 ...

  10. 被迫开始学习Typescript —— vue3的 props 与 interface

    vue3 的 props Vue3 的 props ,分为 composition API 的方式以及 option API 的方式,可以实现运行时判断类型,验证属性值是否符合要求,以及提供默认值等功 ...