补题链接:Here

A - Keyboard

签到,S 为 Y 则输出大写 T,不然则原样输出 T

int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
char s, t;
cin >> s >> t;
cout << (char)(s == 'Y' ? toupper(t) : t);
return 0;
}

B - Futon

对于每个.我们只考虑向右和向下能不能放置即可,这样计数便不会重复。

int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n, m;
cin >> n >> m;
vector<string> s(n);
for (auto &c : s) cin >> c;
int cnt = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
if (s[i][j] == '.') {
if (i + 1 < n && s[i + 1][j] == '.') cnt++;
if (j + 1 < m && s[i][j + 1] == '.') cnt++;
}
cout << cnt << "\n";
return 0;
}

C - Neq Min

维护一个a[]和当前答案t,来一个数就添加一个数,答案输出当前 t 即可。

int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n, t = 0;
cin >> n;
int a[200010] = {0};
for (int i = 1, x; i <= n; ++i) {
cin >> x;
a[x] = 1;
while (a[t]) t++;
cout << t << "\n";
}
return 0;
}

D - Squares

大佬题解另一位大佬的题解

方法非常巧妙投影,举体解释可以参考上述题解。

如果两个正方形在二维平面内相交,那么将两个正方形投影到x轴上会出现两条线段,这两条线段一定相交,同理投影到y轴也一定相交。

由上述性质不难看出我们只需要计算两条线段相交或者不相交的方案数,这个是非常容易的可以参考上述题解的方法。

那么最后答案一定是:X轴不相交的方案数(Y轴随意)+ X轴相交但是Y不相交的方案数

或者是:总方案数− X 轴相交且Y轴相交的方案数

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
using ll = long long;
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int T = 1;
ll N, A, B;
for (cin >> T; T--;) {
cin >> N >> A >> B;
ll C = N - A + 1, D = N - B + 1, E = N - A - B;
ll f = E < 0 ? 0 : (E + 2) * (E + 1) / 2 % mod;
ll ans = 4 * f * (C * D % mod - f) % mod;
cout << (ans + mod) % mod << '\n';
}
return 0;
}

D题非常数学,这个投影的方法还是非常巧妙的,学习了

E - Lamps

这道题TLE了,然后虚拟赛后才发现做个预处理就能A了

不难想到要单独考虑每一个.点最答案的贡献

不妨设.的数量是cnt

如果 g[i][j]=='.'那么考虑什么情况下对答案有贡献?如果能够点亮该点的点数量是 w 那么最终这个点对答案的贡献即是 \((2^w-1)*2^{cnt-w}\) ,只要能点亮该点的一个点点亮即可,不能控制该点的随意。

然后预处理每个点能由多少个点点亮即可。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e3 + 10;
const ll mod = 1e9 + 7;
char g[N][N];
int n, m, w[N][N];
ll base[N * N];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> g[i] + 1; int cnt = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) cnt += (int)g[i][j] == '.';
base[0] = 1;
for (int i = 1; i <= cnt; i++) base[i] = base[i - 1] * 2 % mod;
// 预处理数组
for (int i = 1; i <= n; i++) {
int j = 1;
while (j <= m) {
while (g[i][j] == '#') j++;
int now = 1, k = 1;
while (j + k <= m && g[i][j + k] == '.') now++, k++;
for (int p = j; p < j + k; p++) w[i][p] += now;
j = j + k;
}
}
for (int i = 1; i <= m; i++) {
int j = 1;
while (j <= n) {
while (g[j][i] == '#') j++;
int now = 1, k = 1;
while (j + k <= n && g[j + k][i] == '.') now++, k++;
for (int p = j; p < j + k; p++) w[p][i] += now;
j = j + k;
}
}
// 计算答案
ll res = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (g[i][j] == '#') continue;
int now = w[i][j] - 1;
res = (res + (base[now] - 1) * base[cnt - now] % mod) % mod;
}
}
cout << (ll)(res + mod) % mod << '\n';
return 0;
}

F题随缘补...HHKB Programming Contest 2020

HHKB Programming Contest 2020 补题记录(D题投影,E题预处理节省时间)的更多相关文章

  1. 2021.7.27--Benelux Algorithm Programming Contest 2020 补提

    I Jigsaw 题目内容: 链接:https://ac.nowcoder.com/acm/contest/18454/I 来源:牛客网 You have found an old jigsaw pu ...

  2. HHKB Programming Contest 2020【ABCE】

    比赛链接:https://atcoder.jp/contests/hhkb2020/tasks A - Keyboard 代码 #include <bits/stdc++.h> using ...

  3. HHKB Programming Contest 2020 D - Squares 题解(思维)

    题目链接 题目大意 给你一个边长为n的正方形和边长为a和b的正方形,要求把边长为a和b的正方形放在长度为n的正方形内,且没有覆盖(可以相邻)求有多少种放法(mod 1e9+7) 题目思路 这个思路不是 ...

  4. M-SOLUTIONS Programming Contest 2020 题解

    M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...

  5. Atcoder Panasonic Programming Contest 2020

    前三题随便写,D题是一道dfs的水题,但当时没有找到规律,直接卡到结束 A - Kth Term /  Time Limit: 2 sec / Memory Limit: 1024 MB Score ...

  6. Yahoo Programming Contest 2019 补题记录(DEF)

    D - Ears 题目链接:D - Ears 大意:你在一个\(0-L\)的数轴上行走,从整数格出发,在整数格结束,可以在整数格转弯.每当你经过坐标为\(i-0.5\)的位置时(\(i\)是整数),在 ...

  7. Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 D题题解

    将题意转换为一开始\(t = 0\),第\(i\)个操作是令\(t \leftarrow (a_i + 1) t + (a_i + b_i + 1)\).记\(A_i = a_i + 1, B_i = ...

  8. Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 C题题解

    首先,我们将题目理解成若\(i\)与\(j\)距离恰好为\(3\),则不可能\(p_i \equiv p_j \equiv 1 \space or \space 2 (\bmod 3)\).这就相当于 ...

  9. The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored E.Sequence in the Pocket(思维题)

    传送门 题意: 给出一个序列,你可以将任意一个数移到最前面: 求最少需要移动多少次,可以是此序列变成非递减序列: 思路: 定义 (ai,aj) 为逆序对 ( i < j , ai > aj ...

  10. atcoder Keyence Programming Contest 2020 题解

    比赛地址 A 题意:给一个\(n*m\)的初始为白色的矩阵,一次操作可以将一行或一列染成 黑色,问至少染出\(k\)个黑点的最少操作次数. \(n\),\(m\)<=100,\(k\)<= ...

随机推荐

  1. 谷歌浏览器和火狐浏览器如何查看HTTP协议?

    按F12

  2. 公司要做大数据可视化看板,除了EXCEL以外有没有好用的软件可以用

    当企业需要进行大数据可视化看板的设计和开发时,除了Excel,还有许多其他强大且适合大数据可视化的软件工具.以下是几种常用的好用软件,以及它们的特点和优势,供您参考. 一.Datainside 特点和 ...

  3. Mybatis-Flex之增、删、改

    方法全解 (1) INSERT BaseMapper 的接口提供了 insert 和 insertBatch 方法,用于新增数据: insert(entity):插入实体类数据,不忽略 null 值. ...

  4. ES索引误删的名场面

    ES索引误删的名场面 慌了3秒,果断发个邮件: 01 最近,在版本发布时: ES线上未备份的索引,被当场「误删」了: 对于新手来说,妥妥的社死名场面: 对于老手来说,慌它3秒表示一下态度: 当时的情况 ...

  5. 开发期间flask运行方式(1.x和2.x区别)

    1.x使用app.run(参数) 可以使用debug=True控制处于什么模式. app.run(host="127.0.0.1", port=5000, debug=True) ...

  6. 【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台

    大家好,我是独孤风. 数据可视化是数据领域一个非常重要的应用.而结合了数据可视化和数据探索功能的BI(商业智能)工具,更是被各大公司青睐.但是,由于数据可视化工具的开发成本过高,长期以来一直是商业化的 ...

  7. C# 输出的格式转换,占位/补位,字符串拼接、字符串内插法

    // "0"描述:占位符,如果可能,填充位           Console.WriteLine(string.Format("{0:000000}", 12 ...

  8. 基于QT环境下,实现客户端红外采集人体向服务端通信。

    一.本次测试目的 基于QT环境下STM32人体红外检测,实现客户端红外采集到信息向服务端通信. 二.功能 (1).传入音乐,当服务端接收到信息时,打开音乐    (2).在服务端上面显示图片,当接收到 ...

  9. ASR项目实战-后处理

    本文深入探讨后处理环节. 在本环节要处理的重要特性有分词.断句.标点符号.大小写.数字等的格式归一等. 分词 和NLP.搜索等场景下的分词含义不同.对于拼音类的语言,比如英语.法语等,句子由多个单词组 ...

  10. Springboot3核心特性

    一.简介 1. 前置知识 Java17 Spring.SpringMVC.MyBatis Maven.IDEA 2. 环境要求 环境&工具 版本(or later) SpringBoot 3. ...