A:msc和mas

Solved.

考虑斐波那契数列,即最多加45次即会超过1e9,直接暴力即可

 #include <bits/stdc++.h>
using namespace std; int a, b, l; int solve(int st)
{
int A = a, B = b;
while ()
{
if (st == )
{
if (A > l) return printf("Yes");
else
{
int B0 = B;
while (B < * B0) B += A;
}
}
else
{
if (B > l) return printf("No");
else
{
int A0 = A;
while (A < * A0) A += B;
}
}
st ^= ;
}
} int main()
{
while (scanf("%d%d%d", &a, &b, &l) != EOF)
{
solve(); putchar(' ');
solve(); putchar('\n');
}
return ;
}

B:msc和mcc

Solved.

考虑如果有一个区间满足,那么左右两边扩展区间肯定也是满足的

再考虑从左到右,如果$1-x满足,那么2-y满足的话, 显然有y >= x$

那么只需要双指针找到以i为左界,找到最近的右界,那么这个点的贡献就是n - r + 1

再考虑怎么判断是否合法

不难发现,只有mscmcc 和 mccmsc 两种情况,注意其中可以加入其他字符,但是最终取出的子序列都会归结到这两种情况 都判断一下即可

 #include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 100010
int n;
char str[N];
set <int> m, s, c;
int st_m[], pos_s, pos_c[]; bool check1()
{
// mscmcc
if (s.upper_bound(st_m[]) == s.end()) return false;
pos_s = *s.upper_bound(st_m[]);
if (c.upper_bound(pos_s) == c.end()) return false;
pos_c[] = *c.upper_bound(pos_s);
if (c.upper_bound(max(st_m[], pos_c[])) == c.end()) return false;
pos_c[] = *c.upper_bound(max(st_m[], pos_c[]));
if (c.upper_bound(pos_c[]) == c.end()) return false;
return true;
} bool check2()
{
// mccmsc
if (c.upper_bound(st_m[]) == c.end()) return false;
pos_c[] = *c.upper_bound(st_m[]);
if (c.upper_bound(pos_c[]) == c.end()) return false;
pos_c[] = *c.upper_bound(pos_c[]);
if (s.upper_bound(st_m[]) == s.end()) return false;
pos_s = *s.upper_bound(st_m[]);
if (c.upper_bound(max(pos_s, pos_c[])) == c.end()) return false;
return true;
} bool ok()
{
if (m.size() < ) return false;
if (s.size() < ) return false;
if (c.size() < ) return false;
st_m[] = *m.begin(); m.erase(m.begin());
st_m[] = *m.begin(); m.insert(st_m[]);
if (check1()) return true;
if (check2()) return true;
return false;
} int main()
{
while (scanf("%d", &n) != EOF)
{
m.clear(); s.clear(); c.clear();
ll res = ;
scanf("%s", str + );
for (int i = , r = ; i <= n; ++i)
{
while (r < n && !ok())
{
++r;
if (str[r] == 'm') m.insert(r);
else if (str[r] == 's') s.insert(r);
else c.insert(r);
}
if (!ok()) break;
res += n - r + ;
if (str[i] == 'm') m.erase(i);
else if (str[i] == 's') s.erase(i);
else c.erase(i);
}
printf("%lld\n", res);
}
return ;
}

C:msc的宠物

Upsolved.

先二分答案,再DP求解最少需要删去的边数。

设$g[u] 表示 以 u 为根的子树下最少需要删去的边数,f[u][x] 表示以u为根的子树下u所处的连通块中点权最大值为x的情况下最少需要删去的边数$

$对于u 和 v  如果 a[u] < x 并且 a[v] < x 并且 abs(a[u] - a[v])  < x  那么 u 和 v 就可以同属一个连通块 $

$那么转移就是 f[u][x] += min(g[v] +1, f[v][x])$

其他情况的转移都是 $f[u][x] += g[v] +1$

最后 $g[u] = min(f[u][x])$

 #include <bits/stdc++.h>
using namespace std; #define N 1010
#define INF 0x3f3f3f3f
#define ll long long
int n, k, a[N], f[N][N], g[N]; ll x;
vector <int> G[N]; void dp(int u, int fa = )
{
for (auto v : G[u]) if (v != fa)
{
dp(v, u);
for (int i = ; i <= n; ++i)
{
if (a[u] <= a[i] && a[v] <= a[i] && abs(a[u] - a[v]) <= x)
f[u][i] += min(g[v] + , f[v][i]);
else
f[u][i] += g[v] + ;
}
}
for (int i = ; i <= n; ++i)
g[u] = min(g[u], f[u][i]);
} bool check()
{
memset(g, 0x3f, sizeof g);
for (int i = ; i <= n; ++i) for (int j = ; j <= n; ++j)
f[i][j] = (abs(a[i] - a[j]) <= x) ? : INF;
dp();
return g[] <= k;
} void Run()
{
while (scanf("%d%d", &n, &k) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", a + i);
for (int i = , u, v; i < n; ++i)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
ll l = , r = , res = -;
while (r - l >= )
{
x = (l + r) >> ;
if (check())
{
res = x;
r = x - ;
}
else
l = x + ;
}
printf("%d\n", res);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}

D:msc的背包

Unsolved.

E:msc的序列

Unsolved.

F:msc的无向图

Unsolved.

Wannafly挑战赛28 Solution的更多相关文章

  1. Wannafly挑战赛28

    总结- A-开始觉得是找规律,最开始模拟当时我觉得如果L达到1e9的范围的话,岂不是要加1e9次,模拟也就没有认真写,现在想来,后面由于加的不再是1,而是我前面的值,这样相当了一个斐波那契的类型,而斐 ...

  2. [Wannafly挑战赛28][B msc和mcc][预处理+枚举]

    链接:https://ac.nowcoder.com/acm/contest/217/B来源:牛客网 msc和mcc 题目描述 msc和mcc是一对好朋友,有一天他们得到了一个长度为n的字符串s. 这 ...

  3. Wannafly挑战赛2_D Delete(拓扑序+最短路+线段树)

    Wannafly挑战赛2_D Delete Problem : 给定一张n个点,m条边的带权有向无环图,同时给定起点S和终点T,一共有q个询问,每次询问删掉某个点和所有与它相连的边之后S到T的最短路, ...

  4. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  5. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  6. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  7. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  8. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  9. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

随机推荐

  1. Oracle-未能加载文件或程序集“oracle.dataaccess”或它的某一个依赖项。试图加载格式不正确的程序。

    未能加载文件或程序集“oracle.dataaccess”或它的某一个依赖项.试图加载格式不正确的程序. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以 ...

  2. Android NDK开发-1-环境搭建

    1.NDK介绍 Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”.众所周知,Android程序运行在Dal ...

  3. NodeJS-002-Expres启动

    1.打开app.js文件 2.在module.exports = app;之前输入: app.listen(8100,function(){ console.log("Server Star ...

  4. NUC131演示如何通过PWM触发ADC。

    今天我来讲讲PWM触发ADC的例程 /**************************************************************************** * @f ...

  5. poj_2286 IDA*

    题目大意 给定一个由数字组成的#字型网格,和一定的移动规则,问最少需要多少次移动才能达到要求的结果. 题目分析 要求最少需要几步到达结果,可以考虑广度优先搜索算法,或者迭代加深深度优先搜索(IDA*) ...

  6. Docker源码分析(六):Docker Daemon网络

    1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已然给云计算领域带来了新的发展模式.Docker借助容器技术彻底释放了轻量级虚拟化技术的威力,让容器的伸缩.应用的运行都变得前所未有的方 ...

  7. Mahout实现基于用户的协同过滤算法

    Mahout中对协同过滤算法进行了封装,看一个简单的基于用户的协同过滤算法. 基于用户:通过用户对物品的偏好程度来计算出用户的在喜好上的近邻,从而根据近邻的喜好推测出用户的喜好并推荐. 图片来源 程序 ...

  8. DOM操作的性能问题

    造成DOM操作性能差的原因:1.DOM操作的实现和ECMAscript的实现是两个独立的部分,之间通过接口来完成相应的DOM操作. 2.实时查询文档得到HTML集合,重复执行查询操作.特别是lengt ...

  9. Python汉英/英汉翻译(百度API/有道API)

    一.百度API实现 Step1:申请API Key 以前用过BAE,已经有了Api Key,没有的可以去申请 Step2:挺简单,直接看实现的代码吧 ```python #coding:utf-8 i ...

  10. Microsoft Web Application Stress Tool 使用

    为了测试数据的准备性,首先需要删除缓存和Cookies等临时文件.启动IE后打开“工具”菜单下的“Internet”选项命令,在打开的“Internet选项”窗口的“常规”选项卡中,单击“Intern ...