C. Jellyfish and Green Apple

题解

  • 显然\(n \% m =0\),答案一定为\(0\)

  • 如果\(n > m\),我们显然可以将\(n / m\)的苹果分给每个人,然后再处理$n % m $

  • 如果\(n < m\),我们一定会将所有苹果一直对半切直到\(n > m\),所以答案每次对半切一定会加\(n\)

  • 直到\(n \%m = 0\)的时候结束

  • 那么什么情况下无解呢?

我们考虑每次对半切会使得\(n :=n * 2\),也就是说如果一个质因子\(p,p\neq 2\)在\(m\)中存在,但是在\(n\)中不存在,那么\(n\)不管怎么翻倍,永远不会出现\(n \%m = 0\)

那么这个该如何判断呢?

我们可以通过\(\frac{m}{gcd(n,m)}=2^i\)来判断

int n, m;

int lowbit(int x) { return x & -x; }

void solve()
{
cin >> n >> m;
if (n % m == 0)
{
cout << 0 << endl;
return;
}
n = n % m;
int r = m / gcd(n, m);
if (r != lowbit(r))
{
cout << -1 << endl;
return;
}
int ans = 0;
while (true)
{
while (n * 2 < m)
{
ans += n;
n <<= 1;
}
ans += n;
n <<= 1;
if (n % m == 0)
break;
n = n % m;
}
cout << ans << endl;
}

D. Jellyfish and Mex

\(1 \leq n \leq 5000\)

题解:\(DP\)

  • 我们考虑\(dp\)

  • 显然对于\(a_i > mex\)部分我们可以不用管

  • 如果当前数组\(a\)的\(mex\)为\(g\),我们想使得\(x,x < g\)成为\(mex\),那么代价为\(g \times (cnt[x] - 1) + x\)

  • 我们定义状态为:\(dp[i]\):代表通过删除操作使得\(mex = i\)的最小代价

  • 转移方程为:

\[dp[mex] = 0 \\
dp[i] = min \sum_{j = i + 1}^{mex}(dp[j] + j \times (cnt[i] - 1) + i)
\]

倒序遍历\(i\)即可

  • 显然答案为\(dp[0]\)
int n, a[N];
// dp[i] 代表通过删除操作使得 mex = i 的最小代价 void solve()
{
cin >> n;
map<int, int> mp;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
mp[a[i]]++;
}
int mex = -1;
for (int i = 0;; ++i)
if (!mp.count(i))
{
mex = i;
break;
}
vector<int> dp(mex + 10, INF);
dp[mex] = 0;
for (int i = mex - 1; i >= 0; --i)
for (int j = i + 1; j <= mex; ++j)
dp[i] = min(dp[i], dp[j] + j * (mp[i] - 1) + i);
cout << dp[0] << endl;
}

Codeforces Round 901 (Div的更多相关文章

  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 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

  10. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

随机推荐

  1. Hash表实践 —— 两数之和

    目录 题目背景 解题思路 题目背景 这个题目用常规的双循环就可以完成. 但不是最优解.为什么? 看看他的步骤数: N =[3,2,4] 求结果为6的两个元素坐标如下, 1). 3+2 = 5 不等于 ...

  2. JavaScript – Promise

    前言 我学 Promise 的时候, 那时还没有 es6. 曾经还自己实现过. 但时隔多年, 现在 es6 的 promise 已经很完善了. 这篇作为一个简单的复习. (毕竟我已经 1 年多没有写 ...

  3. C++ STL(标准模版库)—— vector 与 迭代器

    STL 基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称. STL 从广义上讲分为三类:algorithm(算法).containe ...

  4. 仿Linux内核链表实现合并有序链表、逆序单链表功能,C版本 JavaScript版本

    直接贴上已经码好的: list_sort.c: #include <stdio.h> #include <string.h> #include <assert.h> ...

  5. WeiXin.Export.20211230

    C# 在PC上的通过蓝牙(bluetooth)发送数据到手机 将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以) .Net Core Http ...

  6. USB Type-C的工作原理与技术分析

    USB TYPE-C更加深入的应用,是从USB3.1开始的,这是因为从USB3.1开始,USB的功能开始变得更加丰富起来. USB 3.1基本规格 有SS字样的代表支持PD,有SS和10的USB标志代 ...

  7. ftrace irqs跟踪器

    当中断被关闭(俗称关中断)了,CPU就不能响应其他的事件,如果这时有一个鼠标中断,要在下一次开中断时才能响应这个鼠标中断,这段延迟称为中断延迟.向current_tracer 文件写入 irqsoff ...

  8. HOG算法的笔记与python实现

    这两篇[1][2]博客写的都非常详细.这里做个笔记记录一下. HOG称为方向梯度直方图(Histogram of Oriented Gradient),主要是为了对图像进行特征提取.所以在传统目标检测 ...

  9. Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。

    通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...

  10. 反射获取Exception的所有类

    var test = "test"; $"{test} 喜喜".Dump(); // 反射 var types = Assembly .GetAssembly( ...