Codeforces Round #701 (Div. 2)赛后补题报告(A~D)

Codeforces Round #701 (Div. 2)赛后补题报告(A~D)

A. Add and Divide

原题信息

http://codeforces.com/contest/1485/problem/A
在这里插入图片描述

解题思路

对于题目基本有两种方式,一种是直接暴力求解,第二种是使用函数求导进行严格证明
暴力求解
a=1e9a=1e^9a=1e9不难看出,操作最多为 50次,因为249=5629499534213122 ^ 49 = 562949953421312249=562949953421312 直接就超了
那么我们的 bbb最多也就是加50次,然后进行向下整除的模拟即可
一定要注意 b=0b = 0b=0这种情况。
函数求导
首先我们设操作次数为yyy,进行 b+=1b += 1b+=1的次数为xxx,可以得到的关系式为
y=x+(logb+xa+1)y = x + (log_{b+x}a+1)y=x+(logb+xa+1),其中logb+xalog_{b+x}alogb+xa是整除到1的次数,最后 +1是让其变为0
下面我们对他进行求导
y′=1−lna(lnt)2⋅ty'=1-\frac{ln{a}}{(lnt)^2\cdot t}y=1(lnt)2tlna,其中t=b+x,t≥2并且t≥bt=b+x,t\geq2 并且 t\geq bt=b+xt2tb
查看导函数的零点
(lnt)2⋅t=lna,t≥2并且t≥b{(lnt)^2\cdot t}=lna,t\geq2 并且 t\geq b(lnt)2t=lnat2tb,等式左侧递增,右侧为常数lnalnalna,即至多有一个零点
倘若有一个零点
可以直接二分求得零点,我们在零点,零点+1, 零点-1进行求解得结果。
倘若没有零点
直接就是t≥2并且t≥bt\geq2 并且 t\geq bt2tb取得最小值。

AC代码

首先必须吐嘲一下,暴力没往这个向限制,求导生疏了,整了半天,真鸡儿狗
暴力枚举代码

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N = 100010;LL a, b;int sol(LL a, LL b, int add)
{b += add;if (b == 1) return 0x3f3f3f3f;while (a){a /= b;add ++;}return add;
}int main()
{int T;  cin >> T;while (T -- ){scanf("%lld%lld", &a, &b);int res = 1000;for (int i = 0; i <= 50; i ++ ){res = min(res, sol(a, b, i));}cout << res << endl;}return 0;
}

函数求导代码

#include <bits/stdc++.h>
using namespace std;const int N = 100010;
typedef long long LL;
const double esp = 1e-5;
LL a, b;int RealDo(LL a, LL b)
{int ret = 0;while (a){ret ++;a /= b;}return ret;
}int Get(LL a, LL b, LL tarb)
{if (tarb <= 1 || tarb < b)  return 0x3f3f3f3f;// return (tarb - b) + floor(log(a) / log(tarb)) + 1;return (tarb - b) + RealDo(a, tarb);
}double Cal(LL a, LL b)
{double lga = log(a);double l = b, r = 2e9, mid = b;if (lga <= mid * (log(mid) * log(mid)) )    // 不用加return mid;while (abs(l - r) >= esp){mid = (l + r) / 2;if (lga <= mid * (log(mid) * log(mid))) // 高了r = mid;else    // 低了l = mid;}return mid;
}int sol(LL a, LL b)
{double x = Cal(a, b);return min(Get(a, b, x), min(Get(a, b, x + 1), Get(a, b, x - 1)));
}int main()
{int t;cin >> t;while (t -- ){scanf("%lld%lld", &a, &b);cout << sol(a, b) << endl;}return 0;
}

B. Replace and Keep Sorted

原题信息

http://codeforces.com/contest/1485/problem/B
在这里插入图片描述

解题思路

我们单独考虑端点的可能性,已经中间结点不同的次数(可以使用前缀和)
但是一定要仔细考虑什么时候 + 1,什么时候没有+1, 端点是否包括

AC代码

#include <bits/stdc++.h>
using namespace std;const int N = 100010;
int n, k, q;
int a[N];
int b[N];int cal(int l, int r)
{if (l == r) return  k - 1;else{int ret = (a[l] - 1) + (a[l + 1] - a[l] - 1) + (k - a[r]) + (a[r] - a[r - 1] - 1);if (l == r - 1)return ret;elsereturn ret + b[r - 1] - b[l];   // l + 1 ~ r - 1}
}
int main()
{cin >> n >> q >> k;for (int i = 1; i <= n; i ++ )scanf("%d", &a[i]);memset(b, 0, sizeof b);for (int i = 2; i <= n - 1; i ++ )b[i] = (a[i] - a[i - 1] - 1) + (a[i + 1] - a[i] - 1);for (int i = 2; i <= n - 1; i ++ )b[i] += b[i - 1];while (q -- ){static int l, r;scanf("%d%d", &l, &r);// cout << "res" << endl << "\t";cout << cal(l, r) << endl;}return 0;
}

C. Floor and Mod

原题信息

http://codeforces.com/contest/1485/problem/C
在这里插入图片描述

解题思路

C题吐槽一下,当时复杂度分析错了,O(N)O(\sqrt N)O(N)分析成O(N)O(N)O(N),太绝了
⌊ab⌋=a%b=t,t<b\lfloor\frac a b\rfloor=a\%b=t, t< bba=a%b=t,t<b
那么a=t⋅b+t=(b+1)⋅t,A≥a≥1,B≥b≥1a=t \cdot b + t=(b+1)\cdot t, A\geq a\geq1,B\geq b\geq1a=tb+t=(b+1)t,Aa1,Bb1

  • t=1t=1t=1时,a=b+1,b∈[2,B]a=b+1,b\in [2, B]a=b+1,b[2,B]
  • t=2t=2t=2时,a=2⋅(b+1),b∈[3,B]a=2\cdot(b+1),b\in [3, B]a=2(b+1),b[3,B]
  • t=it=it=i时,a=i⋅(b+1),b∈[i+1,B]a=i\cdot(b+1),b\in [i + 1, B]a=i(b+1),b[i+1,B]
    此时,i⋅(b+1)≤A,b≤B,b≥i+1i \cdot (b + 1)\leq A, b\leq B, b\geq i+1i(b+1)A,bB,bi+1
    ⟹b∈[i+1,min(B,⌊Ai⌋−1)]\Longrightarrow b\in [i + 1, min(B,\lfloor \frac A i \rfloor-1)]b[i+1,min(B,iA1)]
    如果⌊Ai⌋−1\lfloor \frac A i \rfloor-1iA1有前缀和公式的话,是可以进行化简为O(1)O(1)O(1)
    最后,b∈[i+1,min(B,⌊Ai⌋−1)]b\in [i + 1, min(B,\lfloor \frac A i \rfloor-1)]b[i+1,min(B,iA1)]可以看出来iii的最大值,是无法取到1e91e91e9的,需要开个根号。

AC代码

#include <bits/stdc++.h>
using namespace std;typedef long long LL;void Sol(LL A, LL B)
{LL a, b, tmp, ret = 0;for (int i = 1; true; i ++ ){tmp = min(B, A / i - 1);// i + 1 ~ tmpif (i + 1 > tmp)    break;else    ret += (tmp - (i + 1) + 1);}cout << ret << endl;
}int main()
{int t;  cin >> t;while (t -- ){static LL a, b;scanf("%lld%lld", &a, &b);Sol(a, b);}return 0;
}

D. Multiples and Power Differences

原题信息

http://codeforces.com/contest/1485/problem/D
在这里插入图片描述

解题思路

可恶啊,这个题目是一个LCM的板子题,没看出来。。。
首先,我们对1~16求LCM = x,我们的 B 数组首先全是x,可以满足multiplemultiplemultiple的性质,然后我们凑性质三,发现可以直接进行隔项加上ai,j4a_{i, j}^4ai,j4,而且数据范围小,满足性质1

AC代码

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N = 510;
int n, m;
int a[N][N];
int b[N][N];int gcd(int x, int y)
{if (y == 0) return x;else    return gcd(y, x % y);
}int lcm(int x, int y)
{return LL(x) * y / gcd(x, y);
}int main()
{cin >> n >> m;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )scanf("%d", &a[i][j]);int x = 1;for (int i = 1; i <= 16; i ++ ){x = lcm(x, i);}for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )b[i][j] = x;for (int i = 1; i <= n; i ++ ){for (int j = (i % 2 == 1 ? 1 : 2); j <= m; j += 2){b[i][j] += (a[i][j] * a[i][j]) * (a[i][j] * a[i][j]);}}// outputfor (int i = 1; i <= n; i ++ ){printf("%d", b[i][1]);for (int j = 2; j <= m; j ++ )printf(" %d", b[i][j]);puts("");}return 0;
}

总结

  • 首先考虑暴力,能否直接缩小范围,省时间
  • 其次,考虑复杂度的时候,分析准确一些
  • 多考虑边界的情况,+1,-1
  • 最后题型要把握清楚,数据范围小的时候,有时候会暴力,有时候直接lcm。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #700 (Div. 2)A~D2解题报告

Codeforces Round #700 (Div. 2)A~D2解题报告 A Yet Another String Game 原题链接 http://codeforces.com/contest/1480/problem/A 解题思路 Alice想让更小&#xff0c;先手Bob想让其更大&#xff0c;后手解决方案当然是贪心&#xff0c;从第一个排到最后一个如果不是选择…

LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)

文章目录1. 比赛结果2. 题目1. LeetCode LCP 17. 速算机器人 easy2. LeetCode LCP 18. 早餐组合 easy3. LeetCode LCP 19. 秋叶收藏集 medium4. LeetCode LCP 20. 快速公交 hard5. LeetCode LCP 21. 追逐游戏 hard1. 比赛结果 做出来2题&#xff0c;第三题写了好长时间无果。还…

LeetCode 第 206 场周赛(733/4491,前16.3%)

文章目录1. 比赛结果2. 题目1. LeetCode 5511. 二进制矩阵中的特殊位置 easy2. LeetCode 5512. 统计不开心的朋友 medium3. LeetCode 5513. 连接所有点的最小费用 medium4. LeetCode 5514. 检查字符串是否可以通过排序子字符串得到另一个字符串 hard1. 比赛结果 做出来3题。继…

lightoj 1026 无向图 求桥

题目链接&#xff1a;http://lightoj.com/volume_showproblem.php?problem1026 #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace …

python基础知识点小结(2021/2/9)

python基础知识点小结(2021/2/9)持续更新中~~ 入门小知识 cmd 在cmd上进行python&#xff0c;直接输入 python\quad pythonpython退出cmd输入 exit()\quad exit()exit()到指定文件夹上运行python文件 python路径文件名.py\quad python 路径文件名.pypython路径文件名.py pyt…

03.结构化机器学习项目 W1.机器学习策略(1)

文章目录1. 机器学习策略2. 正交化 Orthogonalization3. 单一数字评估指标4. 满足和优化指标5. 训练/开发/测试集划分6. 开发集和测试集的大小7. 什么时候该改变开发/测试集和指标8. 人类的表现水准9. 可避免偏差10. 理解人的表现11. 超过人的表现12. 改善你的模型的表现测试题…

Educational Codeforces Round 104 (Rated for Div. 2)A~E解题报告

Educational Codeforces Round 104 (Rated for Div. 2) A. Arena \quad原题链接 http://codeforces.com/contest/1487/problem/A \quad解题思路 首先&#xff0c;我们看战斗次数是无限的&#xff0c;任意非最小值的英雄都有赢得次数&#xff0c;既然有场次可以赢&#xff0…

LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)

文章目录1. 题目2. 解题2.1 DP2.2 单调栈贪心1. 题目 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。&#xff08;知识回顾&#xff1a;如果一个…

03.结构化机器学习项目 W2.机器学习策略(2)

文章目录1. 进行误差分析2. 清除标注错误的数据3. 快速搭建你的第一个系统&#xff0c;并进行迭代4. 使用来自不同分布的数据&#xff0c;进行训练和测试5. 数据分布不匹配时&#xff0c;偏差与方差的分析6. 定位数据不匹配问题7. 迁移学习 Transfer learning8. 多任务学习 Mul…

Codeforces Round #702 (Div. 3)解题报告

Codeforces Round #702 (Div. 3) 全部题解 读错题意&#xff0c;写了半天真是心态爆炸&#xff0c;总的来看这次题目不难的。 A. Dense Array http://codeforces.com/contest/1490/problem/A 解题思路 相邻的数字必然是倘若不满足的话是需要插入数据的&#xff0c;那么我们…

LeetCode 930. 和相同的二元子数组(哈希+前缀和)

文章目录1. 题目2. 解题1. 题目 在由若干 0 和 1 组成的数组 A 中&#xff0c;有多少个和为 S 的非空子数组。 示例&#xff1a; 输入&#xff1a;A [1,0,1,0,1], S 2 输出&#xff1a;4 解释&#xff1a; 如下面黑体所示&#xff0c;有 4 个满足题目要求的子数组&#xff…

poj 3469(网络流模版)

题目链接&#xff1a;http://poj.org/problem?id3469 思路&#xff1a;终于把网络流的模版测试好了&#xff0c;在Dinic和Sap之间还是选择了Sap,事实证明Sap确实比Dinic效率高&#xff0c;在此贴出自己的网络流模版&#xff1a; 1 #include<iostream>2 #include<cstd…

盒子的真实宽高

盒子的宽 两边border 两边padding 盒子的高度 上下border 上下padding

04.卷积神经网络 W1.卷积神经网络

文章目录1. 计算机视觉2. 边缘检测示例3. 更多边缘检测4. Padding5. 卷积步长6. 三维卷积7. 单层卷积网络8. 简单卷积网络示例9. 池化层10. 卷积神经网络示例11. 为什么使用卷积&#xff1f;作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 计算机视觉 举例&#xff1a;图…

JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中

javaSE从 2021/02/22开始&#xff0c;预计到2021/02/28&#xff0c;原本预计的算法题解先鸽一下。 -博客Blog的重要性 & Markdown语法 基础markdown语法 标题&#xff0c; 直接使用 ‘#’&#xff0c;一级二级…五级字体&#xff0c;斜体(左右个一个∗*∗)&#xff0c;加…

LeetCode 1031. 两个非重叠子数组的最大和(一次遍历,要复习)*

文章目录1. 题目2. 解题2.1 暴力枚举2.2 一次遍历1. 题目 给出非负整数数组 A &#xff0c;返回两个非重叠&#xff08;连续&#xff09;子数组中元素的最大和&#xff0c;子数组的长度分别为 L 和 M。&#xff08;这里需要澄清的是&#xff0c;长为 L 的子数组可以出现在长为…

Java入门篇 2021/02/22

Java入门篇 2021/02/22 Java的三大版本 java三大版本主要包括 JavaSE, JavaME, JavaEE&#xff0c;其中现如今的JavaME已经是很少见了&#xff0c;JavaSE是JavaEE的基础。 JDK、JER、JVM三个关系 JDK, JRE, JVM具体的关系可以参照下图&#xff0c;是名副其实的包含关系。 J…

LeetCode 911. 在线选举(二分查找)

文章目录1. 题目2. 解题1. 题目 在选举中&#xff0c;第 i 张票是在时间为 times[i] 时投给 persons[i] 的。 现在&#xff0c;我们想要实现下面的查询函数&#xff1a; TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。 在 t 时刻投出的选票也将被计入…

java 流程控制篇 2021/02/26持续更新中

1. 用户交互Scanner 1.1 简单的Scanner用法 首先&#xff0c;需要 import java.util.Scanner其次&#xff0c;需要创建一个 Scanner 类的对象&#xff0c; Scanner s new Scanner(System.in);通过调用Scanner对象的方法来完成&#xff0c; 一定要注意有开有关&#xff0c;最…

04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)

文章目录作业1&#xff1a;实现卷积神经网络1. 导入一些包2. 模型框架3. 卷积神经网络3.1 Zero-Padding3.2 单步卷积3.3 卷积神经网络 - 前向传播4. 池化层5. 卷积神经网络 - 反向传播5.1 卷积层反向传播5.1.1 计算 dA5.1.2 计算 dW5.1.3 计算 db5.2 池化层 - 反向传播5.2.1 最…