比赛链接:Here

本场题目重现于 2021湘潭全国邀请赛

A - A+B Problem (签到)

根据题意处理即可

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int a, b;
cin >> a >> b;
if (a + b <= 1023 and a + b >= -1024)cout << a + b << "\n";
else if (a + b > 1023)cout << a + b - 2048 << "\n";
else cout << a + b + 2048 << "\n";
}
}

B - Binary Number

C - Calculate

D - Car

E - CCPC Strings (math)

思路来自 聆竹听风

题意:长度为 \(n\) 的只含有”C”或”P”的字符串共有 (\(2^n\))个,问:这所有(\(2^n\))个字符串中含有多少个”CCPC”(每一个”CCPC”之间不能相互重叠,即”CCPCCPC”中只能算(1)个”CCPC”)


假设所有长度为(\(n\))的”CP”字符串中互不重叠的”CCPC”的个数为(\(a_n\))

若认为可以相互重叠,可以通过计算贡献的方式进行计算

详细见 Here

const int mod = 1e9 + 7;
ll a[10];
ll qpow(ll a, ll b) {
ll ans = 1;
for (; b; b >>= 1, a = a * a % mod)
if (b & 1) ans = (ans * a) % mod;
return ans;
}
ll cal(ll x) {
ll an = qpow(2, x - 1) * 64 % mod, a1 = qpow(2, (x - 1) % 6 + 6);
ll inv63 = qpow(63, mod - 2);
ll c = x % 6, z = (x - 1) % 6;
if (c == 0) c += 6;
ll s1 = c * qpow(2, z) % mod;
return ((x * qpow(2, x + 5) % mod - 6 * (an - a1 + mod) % mod * inv63 % mod + mod) % mod - s1) % mod * inv63 % mod;
} int main() {
cin.tie(nullptr)->sync_with_stdio(false);
a[4] = 1, a[5] = 4, a[6] = 12;
int _; for (cin >> _; _--;) {
ll n; cin >> n;
if (n < 7) cout << a[n] << "\n";
else cout << (cal(n - 3) - cal(n - 6) + mod ) % mod << '\n';
}
}

F - Control in a Matrix

G - Game (思维)

首先分析x−(10k−1),减的这个数只能是9,99,999,…

99=9 * 11

999=9 * 111

999…=9 * K

这些数都是9的倍数,K是个奇数,所以对结果没有影响,因此我们可以将这个问题转化为每次减9

将这些数从小到大排序,每次先从最小的开始减

例如:19 10 29 不排序从第一个开始减最后减到的最小结果就是19 10 11(因为19-9=10,与第二个数字10有重复)

排序后的最小结果是1 10 11,这个在计算过程中不会出现少操作数,每个人都可以做到最佳选择

因为存在最后减完的结果一样,但是题目要求不可以出现重复的数字,所以需要再次处理

每次从最小的开始减,余数不为0的每次就让第一个减到0*9+余数,第二个减到1 * 9+余数…以此类推(如果余数为0,第一个减到1 * 9,第二个减到2 * 9,以此类推)

这里的避重(避免重复)操作数可以用前n项和实现

(余数为0) 例:9 18 27 化为最小结果(未对余数进行避重)分别需要的操作是 1 2 3次,总操作数=6

避重的话9应该减为1 * 9,18减为2 * 9,27减为3 * 9,需要的总操作数是1+2+3=6次

6-6=0,所以最后只能对这组数据进行0次操作。

(余数不为0),与上类似,只是第一个数减到0 * 9+余数…

最后总结我们需要计算的就是:

一、将每个数化到最小一共需要多少次操作(一共能减多少次9,先不考虑余数相同)

二、统计余数相同的个数(对9取余 余数为0到8)

三、余数相同的数字,计算去重操作数

四、总操作数-避重操作数即为最后的操作数,如果为偶数,则B赢,反之,则A赢。

const int N = 1e6 + 10;
ll a[N], book[100]; // book 不要取太大,memset太花时间
int n;
int main() {
//cin.tie(nullptr)->sync_with_stdio(false);
while (~scanf("%d", &n) and n) {
memset(book, 0, sizeof(book));
for (int i = 0; i < n; ++i) scanf("%d", a + i);
sort(a, a + n);
int sum = 0;
for (int i = 0; i < n; ++i) {
int b = a[i] % 9;
if (b == 0)b = 9;
sum += (a[i] - b - book[b] * 9) / 9;
book[b]++;
}
cout << "BA"[sum & 1] << "\n";
}
}

H - Huge Directed Graph

I - Sequence

J - Stacks (Good)

很巧妙的图论搜索题,

把栈想成图中的点,根据操作将设定好的结构体左右端点相连。

最后判断情况输出即可

const int N = 1e5 + 10;
struct node {
int l, r;
} q[N]; int idx, n, m, k;
vector<int>e[N];
int b[N]; void dfs(int u, int f) {
for (int v : e[u]) {
if (v == f)continue;
b[++k] = v;
dfs(v, u);
}
} int main() {
cin.tie(nullptr)->sync_with_stdio(false);
while (cin >> n >> m) {
idx = 0;
for (int i = 1; i <= n; ++i) q[i].l = q[i].r = i, e[i].clear(); while (m--) {
int a, b;;
cin >> a >> b;
if (q[a].l and q[b].l) { // a,b
e[q[a].l].push_back(q[b].l);
e[q[b].l].push_back(q[a].l);
q[b].l = q[a].r;
q[a].l = q[a].r = 0;
} else if (q[a].l and !q[b].l) { // a,b
q[b].l = q[a].r;
q[b].r = q[a].l;
q[a].l = q[a].r = 0;
}
} for (int i = 1; i <= n; ++i) {
if (!q[i].l)cout << "0\n";
else {
k = 0;
dfs(q[i].l, -1);
cout << k + 1 << " " << q[i].l;
for (int i = 1; i <= k; ++i) cout << " " << b[i];
cout << "\n";
}
}
}
}

K - Substring (滑动窗口)

滑动窗口,开一个队列数组存出现过的字母下标

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int k; string s;
while (cin >> k >> s) {
queue<int>a[26];
int n = s.length();
int i = 0, j = 1;
a[s[0] - 'a'].push(0);
int Len = 1;
while (i <= j and j < n) {
int t = s[j] - 'a';
a[t].push(j);
if (a[t].size() <= k)Len = max(Len, j - i + 1);
else {
for (int k = i; k < a[t].front(); ++k) a[s[k] - 'a'].pop();
i = a[t].front() + 1;
a[t].pop();
}
j++;
}
cout << Len << '\n';
}
}

L - Swap

2021杭电多校第零场 & 2021湘潭全国邀请赛 补题记录的更多相关文章

  1. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  2. 2018杭电多校第五场1002(暴力DFS【数位】,剪枝)

    //never use translation#include<bits/stdc++.h>using namespace std;int k;char a[20];//储存每个数的数值i ...

  3. 【杭电多校第七场】A + B = C

    原题: Given a,b,c, find an arbitrary set of x,y,z such that a*10^x+b*10^y=c*10^z and 0≤x,y,z≤10^6. 给你三 ...

  4. HDU 5745 La Vie en rose (DP||模拟) 2016杭电多校联合第二场

    题目:传送门. 这是一道阅读理解题,正解是DP,实际上模拟就能做.pij+1 指的是 (pij)+1不是 pi(j+1),判断能否交换输出即可. #include <iostream> # ...

  5. HDU 5744 Keep On Movin (贪心) 2016杭电多校联合第二场

    题目:传送门. 如果每个字符出现次数都是偶数, 那么答案显然就是所有数的和. 对于奇数部分, 显然需要把其他字符均匀分配给这写奇数字符. 随便计算下就好了. #include <iostream ...

  6. HDU 5742 It's All In The Mind (贪心) 2016杭电多校联合第二场

    题目:传送门. 题意:求题目中的公式的最大值,且满足题目中的三个条件. 题解:前两个数越大越好. #include <iostream> #include <algorithm> ...

  7. HDU 5734 Acperience (公式推导) 2016杭电多校联合第二场

    题目:传送门. #include <iostream> #include <algorithm> #include <cstdio> #include <cs ...

  8. HDU 5724 Chess (状态压缩sg函数博弈) 2016杭电多校联合第一场

    题目:传送门. 题意:有n行,每行最多20个棋子,对于一个棋子来说,如果他右面没有棋子,可以移动到他右面:如果有棋子,就跳过这些棋子移动到后面的空格,不能移动的人输. 题解:状态压缩博弈,对于一行2^ ...

  9. 2018 Multi-University Training Contest 3 杭电多校第三场

    躺了几天 终于记得来填坑了 1001 Ascending Rating   (hdoj 6319) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6319 ...

  10. 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)

    Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...

随机推荐

  1. 总结(5)--- Numpy和Pandas库常用函数

    二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准 ...

  2. 手机成绩分析软件排行榜TOP10下载

    随着智能手机的普及和移动应用的快速发展,手机成绩分析软件越来越受到学生.家长和教育机构的关注.这些软件可以帮助用户方便地记录.分析和管理学生成绩,提供个性化的学习指导和反馈.在本文中,将详细介绍202 ...

  3. 叮咚,你的微信年度聊天报告请查收「GitHub 热点速览」

    本周热点项目 WeChatMsg 是一个微信记录提取工具,据说它还能帮你分析聊天记录.生成你的年度聊天报告.而又到了年底,部分不幸的小伙伴要开始写年度总结了,这时候 self-operating-co ...

  4. 新来个架构师,把Xxl-Job原理讲的炉火纯青

    大家好,我是三友~~ 今天来继续探秘系列,扒一扒轻量级的分布式任务调度平台Xxl-Job背后的架构原理 公众号:三友的java日记 核心概念 这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有 ...

  5. Aignize第一期完善产品逻辑+类图说明书

    Aiganize产品说明+拟类图(第一期) ·附图: 此应用由: 前端:微信小程序前端+vue3后台管理系统后端:Springboot+Mysql 服务器:后端服务器+AI交互服务器 整个应用流程大致 ...

  6. WinForm遍历控件

    1 foreach (Control c in this.Controls) 2 { 3 if (c is TextBox) 4 ((TextBox)c).Text = "1111" ...

  7. Linux笔记03: Linux常用命令_3.4文件和目录共用命令

    3.4 目录和文件共用命令 3.4.1 rm命令 ●命令名称:rm. ●英文原意:remove files or directories. ●所在路径:/usr/bin/rm. ●执行权限:所有用户. ...

  8. 衡兰芷若成绝响,人间不见周海媚(4k修复基于PaddleGan)

    一代人有一代人的经典回忆,1994年由周海媚.马景涛.叶童主演的<神雕侠侣>曾经风靡一时,周海媚所诠释的周芷若凝聚了汉水之钟灵,峨嵋之毓秀,遇雪尤清,经霜更艳,俘获万千观众,成为了一代人的 ...

  9. 一文搞定K8S监控告警平台选型

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 前言 最近在搞K8S的监控告警平台选型,对比了目前比较流行两款开源平台kube-prometheus.夜莺,也踩了一些坑分享 ...

  10. C# 获取另一程序控件,改变值,触发事件

    [DllImport("User32.dll", EntryPoint = "FindWindow")]private static extern IntPtr ...