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. Python 高斯坐标转经纬度算法

    # 高斯坐标转经纬度算法# B=大地坐标X# C=大地坐标Y# IsSix=6度带或3度带def GetLatLon2(B, C,IsSix): #带号 D = math.trunc(C / 1000 ...

  2. Python查询数据库时候遇到的乱码问题

    今天在看Python连接数据库的内容,然后遇到了最常遇到的字符乱码的状况,这真的很烦人,由于我用的是3.6的版本,,默认的是utf-8,如果是3以下的版本,请在文件开头加一句代码 #encoding= ...

  3. pycharm激活地址

    http://elporfirio.com:1017 http://idea.iteblog.com/key.php

  4. Resin任意文件读取漏洞

    Resin是什么 虽然看不上但是还是原因下百度百科: Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快.Resin本身包含了一个支持HTTP/1.1的 ...

  5. 代码片段,lucene基本操作(基于lucene4.10.2)

    1.最基本的创建索引: @Test public void testIndex(){ try { Directory directory = FSDirectory.open(new File(LUC ...

  6. Gitlab邮箱配置

    一些动作会自动发邮件,比如合并代码等 未验证

  7. 探究 Oracle 高水位对数据库性能影响

    在开始深入分析之前,让我们先来了解一下高水位线 HWM. 一. HWM 的基本原理 (概念) 在 Oracle 中,高水位线(High-warter mark, HWM)被用来形容数据块的使用位置,即 ...

  8. Elasticsearch之settings和mappings(图文详解)

    Elasticsearch之settings和mappings的意义 简单的说,就是 settings是修改分片和副本数的. mappings是修改字段和类型的. 记住,可以用url方式来操作它们,也 ...

  9. 【react 条件渲染】在render的html中使用 三元运算符 进行条件渲染

    return ( {renderedPages.map(page => ( <Button key={page} onClick={() => onPageChange(page)} ...

  10. Rain on your Parade---hdu2389(HK求最大匹配)

    题目链接 题意:有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可以拿到雨伞? 就是求最大匹配的  Hopcroft-Karp复杂度 ...