2024湖北省赛VP

湖北省赛VP

https://codeforces.com/gym/105139/attachments/download/25287/Sol_ICPC_hubei_24.pdf

E. Spicy or Grilled?

题意

由于常规节目比赛持续五个小时,在比赛期间为选手准备食物是个大问题。

2aceebec00a61b0864fce9d24f11213aab3fc731

在中国湖北省举办的 20XX 年国际大学生程序设计竞赛中,共有 \(n\) 名选手参赛。主持人想为每位选手准备一份香辣鸡肉汉堡套餐,当时每套套餐的价格是 \(a\) 元。但由于有些人像 Walk Alone 一样不能忍受辣味,所以为这些人准备了烤鸡肉汉堡套餐,每套 \(b\) 美元。在比赛之前,主持人已经收集了想吃烤鸡肉汉堡套餐的人数 \(x\)

但是,"独行侠 "太笨了,懒得去计算主持人要花多少钱。请帮他计算一下。

题解

我觉得麦当劳不素之霸更好吃,谁赞成,谁反对

1
2
3
4
5
6
void slove() {
int n,a,b,x;
cin>>n>>x>>a>>b;

cout<<1ll * (n-x) * a + x * b<<endl;
}

J. Points on the Number Axis A

题意

爱丽丝正在数轴上玩单人游戏。

数轴上有 \(n\) 个点。玩家每次选择两个点。这两个点将被移除,并加上它们的中点。当数轴上只有一个点时,游戏结束。形式上,如果所选的两个点分别是 \(x_i\)\(x_j\),那么操作后将添加 \(\dfrac{x_i+x_j}{2}\)

为了愉快地玩这个游戏,爱丽丝总是会随机选择两个点。

现在爱丽丝有一个问题:最后一个点的预期位置在哪里?

可以证明答案可以用 \(\dfrac{p}{q}\) 的形式表示,只需输出 \(p\cdot q^{-1} \bmod 998,244,353\) 的值即可。

题意

其实就是所有点的平均值位置

下面是证明:

现在,假设我们有n个点,它们的坐标是\(x_1, x_2, …, x_n\),并且我们已经证明了对于任意的\(i\)\(j\),点 \(x_i\)\(x_j\)的中点的期望坐标是\(\frac{x_i + x_j}{2}\)。那么,对于这\(n\)个点,我们可以计算它们所有可能中点的平均值: \[ E = \frac{1}{\binom{n}{2}} \sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \frac{x_i + x_j}{2} \]

\[ E = \frac{2}{n(n-1)} \sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \frac{x_i + x_j}{2} \]

\[ E = \frac{1}{n} \sum_{i=1}^{n} x_i \]

以上推导基于期望的线性性质,最后两个公式之间可能并非那么显然,考虑对单独的\(x_i\)它出现在了中点计算公式中出现了\(n-1\)次,因此后面的二重求和可以变为: \[ \frac{(n-1)}{2}\sum_{i=1}^{n} x_i \] 剩下的就很好理解了。

数学推导对这样的“显然解”证明,有着更好的一套方法:

没能够看懂题解上得公式。。。。

1
2
3
4
5
6
7
8
9
void slove() {
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];

ll sum = 0;
for(int i=1;i<=n;i++) sum += a[i];

cout<<sum %MOD * qmi(n,MOD-2) % MOD<<endl;
}

A. Long Live

题意

在《我的世界》中,简单的世界有三个维度,其中一个维度被称为 "终结"。在这个维度中,埃德龙通常被象征为《威廉与魔法》的最终 BOSS。

现在,我们、你和史蒂夫都想打败这条龙。然而,我们发现艾德龙在讲述一个谜题。我们必须先解开谜题,才能与巨龙战斗。请站在我们这边,共同对抗巨龙。谜题如下

给定两个正整数 \(x\)\(y\) ,请找出两个整数 \(a\)\(b\) ,使得

\[ \sqrt{\frac{lcm(x,y)}{gcd(x,y)}} = a \sqrt{b} \]

并使 \(a \cdot b\) 最大。

这里, \(\gcd(a,b)\) 表示 \(a,b\) 的最大公约数,而 \(\rm lcm(a,b)\) 表示 \(a,b\) 的最小公倍数。

题意

如果你的数学功底很好肯定可以极快的打出这一场的签到

简单的数学带入推到公式得到

\[ a \cdot b ={\frac{lcm(x,y)}{a\cdot gcd(x,y)}} \]

1
2
3
4
5
6
7
void slove() {
int x,y;cin>>x>>y;

int gc = gcd(x,y);
int lc = lcm(x,y);
cout<<1<<' '<<lc/gc<<endl;
}