2022牛客多校(十)

一、比赛小结

比赛链接:"蔚来杯"2022牛客暑期多校训练营10

二、题目分析及解法(基础题)

F、Shannon Switching Game?

题目链接:F-Shannon Switching Game?

题意:

给定一个无向图,初始时有一个token在s点,两个玩家Join Player和Cut Player轮流行动,Cut Player先动。Cut Player每次可以移除一条和token所在位置相邻的边, Join Player每次可以将token沿着一条未删除边移动, 如果token在某刻被移动到t则Join Player获胜,否则Cut Player获胜,求双方最优策略下的胜者。

题解:

  • 我们可以求出在双方最优策略下使得Join Player可以将token移动到t的所有token起点集合,把这个集合叫做good set

  • 首先,t点一定是在good set中的,我们从t开始逐步构建good set。某个不在good set中的顶点v如果有至少两条边连向good set中的某个顶点,那么从该点出发的话,由于Cut Player在一次操作中只能切断其中的一条边,那么Join Player一定可以在一次操作后将token移动到good set中的某个顶点,因此此时v也在good set中。

  • 如果在某一时刻,任何不在good set中的顶点都只有至多一条边连向good set中的某个顶点,那么从不在good set中的任一顶点出发,Cut Player只需要每次切断可能连向good set的边即可,那么此时不在goodset中的顶点一定都不能到达t点。

  • 构建可以通过维护一个队列来实现,时间复杂度为O(n+m),其中n是顶点个数,m是边数 。

代码:

#include <bits/stdc++.h>
using namespace std;
int T, n, m, s, t;
const int maxn = 1e2 + 5;
int g[maxn][maxn], num[maxn];
bool vis[maxn];
bool bfs() {queue<int> q;q.push(t);vis[t] = 1;while (q.size()) {int u = q.front();q.pop();for (int i = 1; i <= n; i++) {if (vis[i]) continue;num[i] += g[u][i];if (num[i] > 1) {q.push(i);vis[i] = 1;}}}return num[s] > 1;
}
int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> T;while (T--) {memset(vis, 0, sizeof vis);memset(g, 0, sizeof g);memset(num, 0, sizeof num);cin >> n >> m >> s >> t;while (m--) {int u, v;cin >> u >> v;g[u][v]++;g[v][u]++;}cout << (bfs() ? "Join Player" : "Cut Player") << endl;}return 0;
}

H、Wheel of Fortune

题目链接:H-Wheel of Fortune

题意:

炉石传说,一方转动了尤格萨隆的命运之轮触发了炎爆选项,双方英雄的血量分别为 AAA 和 BBB ,双方场面的血量分别为 {ai∣1≤i≤7}\{a_i|1\leq i \leq 7\}{ai​∣1≤i≤7} 和 {bi∣1≤i≤7}\{b_i|1\leq i \leq 7\}{bi​∣1≤i≤7} ,问 AAA 获胜的概率,答案对 998244353998244353998244353 取模

题解:

答案其实和怪的血量是无关的,令 x=⌈A10⌉,y=⌈B10⌉x=\lceil \frac{A}{10} \rceil , y = \lceil \frac{B}{10} \rceilx=⌈10A​⌉,y=⌈10B​⌉ ,则答案为 ∑i=0x−1(i+y−1i)⋅2−(y+i)\displaystyle \sum_{i=0}^{x-1} {i+y-1 \choose i} \cdot 2^{-(y+i)}i=0∑x−1​(ii+y−1​)⋅2−(y+i)

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e7 + 5;
const int mod = 998244353;
ll A, B, a, b, x, res;
ll fact[maxn];
ll qpow(ll a, ll n, ll mod) {ll res = 1;while (n) {if (n & 1) res = (res * a) % mod;a = (a * a) % mod;n >>= 1;}return res;
}
ll inv(ll a, ll p) { return qpow(a, p - 2, p); }
ll C(ll b, ll a) {return fact[a] * inv(fact[b], mod) % mod * inv(fact[a - b], mod) % mod;
}
void init() {fact[0] = 1;for (int i = 1; i < maxn; i++) {fact[i] = fact[i - 1] * i % mod;}
}
int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);init();cin >> A;for (int i = 1; i <= 7; i++) cin >> x;cin >> B;for (int i = 1; i <= 7; i++) cin >> x;a = ceil(1.0 * A / 10), b = ceil(1.0 * B / 10);for (int i = b; i <= b + a - 1; i++)res = (res + C(b - 1, i - 1) * inv(qpow(2, i, mod), mod) % mod) % mod;cout << res << endl;return 0;
}

I、Yet Another FFT Problem?

题目链接:I-Yet Another FFT Problem?

题意:

给定两个序列 A={ai},B={bi}A=\{a_i\}, B=\{b_i\}A={ai​},B={bi​} ,是否存在 i,j,k,li, j, k, li,j,k,l 使得

  • 1≤i≠j≤n,1≤k≠l≤m1\leq i\not= j \leq n, 1\leq k\not= l \leq m1≤i=j≤n,1≤k=l≤m

  • ∣ai−aj∣=∣bk−bl∣|a_i-a_j| = |b_k-b_l|∣ai​−aj​∣=∣bk​−bl​∣

题解:

不失一般性,我们假设序列 A,BA,BA,B 中均无重复元素,题目等价叙述为找到一组 i,j,k,li, j, k, li,j,k,l 使得

  • 1≤i≠j≤n,1≤k≠l≤m1\leq i\not= j \leq n, 1\leq k\not= l \leq m1≤i=j≤n,1≤k=l≤m

  • ai+bl=aj+bka_i+b_l=a_j+b_kai​+bl​=aj​+bk​

    那么我们只需遍历 {ai+bj}\{a_i+b_j\}{ai​+bj​} ,利用抽屉原理遍历一下即可找到答案

代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e7 + 7;
const int N = 1e6 + 7;
int n, m;
int a[N], b[N], apos[MAXN], bpos[MAXN];
bool t[MAXN << 1];
int ansa[MAXN << 1], ansb[MAXN << 1];
signed main() {scanf("%d%d", &n, &m);vector<int> ans;for (int i = 1; i <= n; i++) {int x;scanf("%d", &x);a[i] = x;if (!apos[x]) {apos[x] = i;} else if (ans.size() == 0) {ans.push_back(apos[x]);ans.push_back(i);}}for (int i = 1; i <= m; i++) {int x;scanf("%d", &x);b[i] = x;if (!bpos[x]) {bpos[x] = i;} else if (ans.size() == 2) {ans.push_back(bpos[x]);ans.push_back(i);}}if (ans.size() == 4) {for (auto v : ans) cout << v << " ";return 0;} else {sort(a + 1, a + n + 1);n = unique(a + 1, a + n + 1) - a - 1;sort(b + 1, b + m + 1);m = unique(b + 1, b + m + 1) - b - 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {int x = a[i] + b[j];if (t[x]) {printf("%d %d %d %d", ansa[x], apos[a[i]], ansb[x], bpos[b[j]]);return 0;}ansa[x] = apos[a[i]];ansb[x] = bpos[b[j]];t[x] = 1;}}printf("-1\n");}return 0;
}

三、题目分析及解法(进阶题)

2022牛客多校(十)相关推荐

  1. 2022牛客多校十 E-Reviewer Assignment(匈牙利算法)

    题目链接:登录-专业IT笔试面试备考平台_牛客网 题目: 样例输入: 5 3 010 010 101 011 100 样例输出: 2 2 1 3 1 题意:给定n个人和m篇文章,然后给出一个n*m的矩 ...

  2. (2022牛客多校五)H-Cutting Papers(签到)

    样例输入: 2022 样例输出: 3649785.912339927 题意:求|x|+|y|+|x+y|<=n所在的区域和x*x+y*y=(n/2)*(n/2)所在区域的面积并. 这道题就是一个 ...

  3. [manacher][hash]Magic Spells 2022牛客多校第9场 G

    题目描述 One day in the magic world, the young wizard RoundDog was learning the compatibility of spells. ...

  4. 2022牛客多校联赛第九场 题解

    比赛传送门 作者: fn 目录 签到题 A题 Car Show / 车展 基本题 B题 Two Frogs / 两只青蛙 进阶题 G题 Magic Spells / 魔法咒语 签到题 A题 Car S ...

  5. 2022牛客多校 C Grab the Seat!

    题意 二维平面,屏幕是 (0, 1)–(0, m) 的线段 有 n 行 m 列座位在屏幕前面,是坐标范围 1 ≤ x ≤ n, 1 ≤ y ≤ m 的整点 有 k 个座位已经有人,求出到屏幕的视线不被 ...

  6. [构造]Array 2022牛客多校第6场 A

    题目描述 Ranran has a sequence aaa of nnn integers a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1​,a2​,⋯,an​ which s ...

  7. 2022牛客多校2题解报告(同步自语雀)

    一.赛后总结 总结就是缺乏清晰的大脑,当然一切的一切归因于实力不足. 开局看K,半个小时推出DP式子,交了就WA.差错没查出来,写了暴力对拍,就去看D了.后来拍了3个小时也没出问题...可能是数据生成 ...

  8. 2022牛客多校第一场A、C、D、G、I、J

    A- Villages: Landlines 题意: 在一条横轴上给定nnn个点横坐标xsx_sxs​和半径rsr_srs​,可以在横轴上任意两点连线,问连接这nnn个点形成的圆的连线最小长度为多少. ...

  9. 【2022牛客多校第六场 Z题 Game on grid】dp

    题目描述 输入描述 2 3 3 -B -B BB. 1 3 - 输出描述 no no yes no yes no 题意 有一个n*m的棋盘,Alice和Bob轮流进行操作,每操作一步都是从当前点到右边 ...

最新文章

  1. 旋转卡壳——模板(对踵点)
  2. 辛苦了一个下午和晚上,给Blog换了个新皮肤
  3. A1087. 高精度加法
  4. NLTK与NLP原理及基础
  5. 苹果手机home键在哪里_苹果手机为什么没有返回键?原来隐藏着更好的方法,涨知识了...
  6. wordpress使用二级域名绑定七牛云存储做图片存储站
  7. node.js HelloWord
  8. 自由、开源及其敌人 —— RMS事件簿
  9. dataframe 添加一行_R语言Data Frame数据框常用操作
  10. 微信无法连接到服务器怎么诊断网络【微信高级教程3】
  11. 笔记——常用网站总结
  12. justify-content
  13. AutoCAD2020快捷键
  14. 《孤勇者》matlab版,用matlab弹奏《孤勇者》
  15. Ubuntu16.04+VMware15.0.4系统瘦身
  16. 苹果pencil和普通的有什么区别?推荐好用的平替笔
  17. 基于python的数据分析-基于Python的南京二手房数据可视化分析
  18. clang diagnostic的简单介绍
  19. 操作系统概念v9 Abraham Silberschatz 全文笔记
  20. 计算机网络(4)传输层

热门文章

  1. 【观察】谁是中国容器软件市场TOP厂商?权威研究机构IDC发布最新报告
  2. ECharts地图详解
  3. 赛扬处理器_【推仔说新闻】英特尔发布新款奔腾、赛扬处理器
  4. 水库水位库容监测系统方案
  5. 关于数据存储的三道面试题,你会吗?
  6. [leetcode]378. 有序矩阵中第 K 小的元素
  7. [教程]通过注册表关闭win10 xbox dvr 游戏录像
  8. 复习1:bool类型和char数组
  9. tkMapper的基本使用
  10. 8.14-T1村通网(pupil)