补题链接: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. MySQL-防止误删除的方案就是删除,看不见岂不就是删除了吗,所以就是把它隐藏起来。

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 伪删除: 用update替代delete 1.添加状态列 ALTER TABLE student2 ADD state ...

  2. 深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析

    本文分享自华为云社区<深入理解HarmonyOS UIAbility:生命周期.WindowStage与启动模式探析>,作者:柠檬味拥抱. UIAbility组件概述 UIAbility组 ...

  3. JeecgBoot 框架升级至 Spring Boot3 的实战步骤

    JeecgBoot 框架升级 Spring Boot 3.1.5 步骤 JEECG官方推出SpringBoot3分支: https://github.com/jeecgboot/jeecg-boot/ ...

  4. 我用 AI 写的《JavaScript 工程师的 Python 指南》电子书发布啦!

    关于本书 你好,我是 luckrnx09,一名靠 React 恰饭的前端工程师,很高兴向你介绍我的第一本开源电子书<JavaScript 工程师的 Python 指南>. 本书的内容完全免 ...

  5. 高效的 Json 解析框架 kotlinx.serialization

    一.引出问题 你是否有在使用 Gson 序列化对象时,见到如下异常: Abstract classes can't be instantiated! Register an InstanceCreat ...

  6. Docker容器运行、使用、管理

    docker container [COMMAND] 命令: **exec 在容器中执行命令** export 将容器的文件系统导出为tar归档文件(和docker save的区别在于,save会记录 ...

  7. Mongodb数据增删改查

    RDB:数据库 → 表(列) → 行 Mongo:数据库 → 集合 → 文档 SQL和Mongodb的关系映射表(里面还有一些增删改查等等操作与SQL的对应的语句): https://www.mong ...

  8. python 获取android 应用使用情况

    python 获取android 应用使用情况 本文主要讲述python 脚本获取android 应用使用情况. 主要思路:使用adb 获取当前activity ,1s 一次输出. 主要涉及知识点: ...

  9. 痞子衡嵌入式:Farewell, 我的写博故事2023

    -- 题图:苏州虎丘塔 2023 年的最后一天,照旧写个年终总结.昨晚和同门师兄弟一起吃饭,有个师弟告诉痞子衡,微博上一个拥有 22.3W 粉丝的嵌入式同行今年 4 月发过一个吐槽微博,说恩智浦 MC ...

  10. GO的逃逸分析

    逃逸分析 前言 指的就是由编译器决定内存分配的位置,不需要由程序员来指定.函数中申请一个新的对象,其目的是为了提高程序的性能,减少内存分配和垃圾回收的开销. 分配在 栈 中, 则函数执行结束则可自动将 ...