补题链接:Here

1498A. GCD Sum

题意:给定一个 gcdSum 操作:\(gcdSum(762) = gcd(762,7 + 6 + 2) = gcd(762,15) = 3\)

请问要执行多少次 gcdSum 才能使结果不为 \(1\)

输出最后的 \(n\) 值

思路:按题意来,因为数据范围在 1e18 在执行 gcdSum 时比较快

using ll = long long;
ll gcd(ll x, ll y) { return y == 0 ? x : gcd(y, x % y); }
ll getSum(ll n) {
ll s = 0;
while (n) {
s += n % 10, n /= 10;
}
return s;
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
ll n;
cin >> n;
while (gcd(n, getSum(n)) == 1) n++;
cout << n << "\n";
}
return 0;
}

1498B. Box Fitting

题意:在一个被限定了宽度的盒子中给一些长度为 \(2^x\) 高度为 \(1\) 的长方块,请问怎么排放才能使最终高度最小

思路:先利用 map 存储各个长度的值,然后二分找到在该行中最大的一块然后填充。

这里建议看代码理解

int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
int n, w;
cin >> n >> w;
map<int, int> mp;
for (int i = 0, x; i < n; ++i) {
cin >> x;
mp[x]++;
}
int ans = 1, cur = w;
while (mp.size()) {
if (mp.begin()->first > cur) {
++ans, cur = w;
}
auto it = prev(mp.upper_bound(cur));
assert(it->first <= cur);
cur -= it->first;
if (--(it->second) == 0) mp.erase(it);
}
cout << ans << "\n";
}
return 0;
}

1498C. Planar Reflections

DP优化 + 模拟

题意:给定一个可以穿越墙体的微观粒子(寿命为 \(k\)),但是每穿越一次墙体会产生一个反向寿命为 \(k - 1\) 的粒子。

请问最终共有多少个粒子?

思路:模拟变化过程,然后开DP数组存储已经计算过的即可,写的时候要注意细节,比如什么时候 \(k - 1\) 或者 \(1 - dir\) 方向变化

const int mod = 1e9 + 7;
int n, k;
int dp[1010][1010][2];
int solve(int cur, int k, int dir) {
if (k == 1) return 1;
// 非 -1 说明已经计算过了
if (dp[cur][k][dir] != -1) return dp[cur][k][dir];
int ans = 2; // 本身和穿过墙的复制体
if (dir == 1) {
if (cur < n) ans += solve(cur + 1, k, dir) - 1;
ans %= mod;
if (cur > 1) ans += solve(cur - 1, k - 1, 1 - dir) - 1;
ans %= mod;
dp[cur][k][dir] = ans;
} else {
if (cur > 1) ans += solve(cur - 1, k, dir) - 1;
ans %= mod;
if (cur < n) ans += solve(cur + 1, k - 1, 1 - dir) - 1;
ans %= mod;
dp[cur][k][dir] = ans;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
cin >> n >> k;
memset(dp, -1, sizeof dp);
cout << solve(1, k, 1) << '\n';
}
return 0;
}

在学习高榜大佬的代码时候发现的一种解法,Orz...

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int X[1001], Y[1001], n, k, K, R, val;
signed main() {
for (cin >> n; cin >> n >> k;) {
for (R = 0; R <= n; R++) X[R] = Y[R] = 0;
for (K = 2; K <= k; K++) {
for (R = n; R >= 0; R--) X[R] = (R + Y[n - R]) % mod;
val = 0;
for (R = n - 1; R >= 0; R--) Y[R] = (val += X[R]) %= mod;
}
cout << (1 + X[n]) % mod << ' ';
}
}

CodeCraft-21 and Codeforces Round #711 (Div. 2) A~C 个人题解的更多相关文章

  1. Codeforces Round #609 (Div. 2)前五题题解

    Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...

  2. CodeCraft-21 and Codeforces Round #711 (Div. 2)

    就ac了俩 A题求gcd>1,WA了好多发....因为感觉没错,结果后面一看n的数据10^18,原来是没用long long. 经验:今后一定要看看数据范围. B题,一开始没看懂题意,不知道什么 ...

  3. Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划

    题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...

  4. Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解 组合数学

    题目链接:https://codeforces.com/contest/1265/problem/E 题目大意: 有 \(n\) 个步骤,第 \(i\) 个步骤成功的概率是 \(P_i\) ,每一步只 ...

  5. Codeforces Round #624 (Div. 3) F. Moving Points 题解

    第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...

  6. Codeforces Round #676 (Div. 2) A - D个人题解(E题待补)

    1421A. XORwice 题目链接:Click Here // Author : RioTian // Time : 20/10/18 #include <bits/stdc++.h> ...

  7. Codeforces Round #677 (Div. 3) E、G题解

    E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...

  8. Codeforces Round#402(Div.1)掉分记+题解

    哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...

  9. Codeforces Round #604 (Div. 2) 练习A,B题解

    A题 链接 思路分析: 因为只需要做到相邻的不相同,利用三个不同的字母是肯定可以实现的, 所以直接先将所有的问号进行替换,比如比前一个大1,如果与后面的冲突,则再加一 代码(写的很烂): #inclu ...

  10. Codeforces Round #599 (Div. 2)的简单题题解

    难题不会啊…… 我感觉写这个的原因就是因为……无聊要给大家翻译题面 A. Maximum Square 简单题意: 有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一 ...

随机推荐

  1. Netty源码学习8——从ThreadLocal到FastThreadLocal(如何让FastThreadLocal内存泄漏doge)

    系列文章目录和关于我 一丶引入 在前面的netty源码学习中经常看到FastThreadLocal的身影,这一篇我们将从ThreadLocal说起,来学习FastThreadLocal的设计(< ...

  2. [c/c++][考研复习笔记]内部排序篇学习笔记

    考研排序复习笔记 插入排序 #include<stdio.h> #include<stdlib.h> #define MaxSize 9 //折半插入排序 void ZBIns ...

  3. 蓝桥杯-最短路 (SPFA算法学习)

    SPFA算法主要用来解决存在负边权的单源最短路情况(但不能有负环!!!)一个简单的方法判断是否有没有负环可以通过判断是否有一个节点是否频繁进出队列. 以下内容转自https://blog.csdn.n ...

  4. 记一次 .NET 某药厂业务系统 CPU爆高分析

    一:背景 1. 讲故事 前段时间有位朋友找到我,说他们的程序出现了CPU爆高,让我帮忙看下怎么回事?这种问题好的办法就是抓个dump丢给我,推荐的工具就是用 procdump 自动化抓捕. 二:Win ...

  5. 数字孪生为何通过融合GIS系统能够更好地助力智慧城市发展?

    随着城市化进程的不断加速,智慧城市建设已成为许多城市发展的重要方向.在智慧城市中,数字孪生技术和GIS系统的融合,为城市发展带来了全新的可能性和机遇.数字孪生是一种将物理世界和数字世界相结合的技术,通 ...

  6. 【C#】【Equals和ReferenceEquals】关于对象和值的问题

    在学习C#中的记录类型时,对出现的Equals和ReferenceEquals得到的不同结果表示不理解,随即进行相关资料查找. 值类型 == : 比较两者的"内容"是否相同,即&q ...

  7. Kernel Memory 入门系列:自定义处理流程

    Kernel Memory 入门系列:自定义处理流程 在整个文档预处理的流程中,涉及到很多的处理步骤,例如:文本提取,文本分片,向量化和存储.这些步骤是Kernel Memory中的默认提供的处理方法 ...

  8. minio集群部署

    minio集群部署 1.说明: 安装前需要再添加一个磁盘后将磁盘挂载到/opt/minio目录,minio集群部署需要独占磁盘分区,不能使用文件夹代替. 运行分布式 MinIO 实例的服务器时间差不应 ...

  9. 通过印模生成电子印章-Java源代码

    以下代码是处理印模图片的核心代码,通过以下代码可以将公章图片转换为电子印章图片. 制作方式分为四步: 1.在白纸上加盖印章: 2.把加盖印章的白纸扫描,形成图片: 3.将图片通过下面的代码进行自动透明 ...

  10. 使用XDT提高开发效率

    使用XDT提高开发效率 XDT介绍 XDT(XML Document Transformation)技术是一种用于对XML文档进行转换的技术.它通常用于在部署或配置过程中,根据不同的环境或条件自动修改 ...