数学杂谈(算法类+ Ancient Berland Circus的解决)

这个随笔是算是我博客数学类的第一条吧,觉得还是写点感想的好。话说这个算法里的数学类一般就是解决一些容斥呀,数论呀,或者是组合数学之类的问题。但老实说,这只是狭义上的数学,但我们用什么数据结构啊,什么dp呀,什么图论呀,都应归属于广义上的数学。所以,无论是谁,都应该将数学作为自己的最强辅助。对于理论性的东西,很多acmer都不愿去思考,都只会拿一些现成的东西直接套用,虽说这是一种处理问题的技巧,但若长此以往,肯定会对我们思维能力造成坏的影响。所以,我们遇到问题一定要独立思考,少用别人的套路,多点自己的套路。

好吧,废话讲了那么多,我们来讨论讨论关于欧几里德这个小东西。欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。哦,是不是觉得这个很简单?你看到这个一定毫不犹豫写上下面这个代码

1 int gcd(int a, int b) {
2     return a ? gcd(b%a, a) : b;
3 }

嗯,是很简单,但是注意,欧几里德只能解决两个整数的最大公约数的问题,但小数(当然,小数并没有最大公约数这个概念,这里都统一将小数看作整数)呢?小数电脑可不支持取模运算呀。嗯,没错,我们一直用电脑自带的取模运算符%来帮我们进行取模运算,但很多学生(包括我T_T)一开始就接触这个导致它的老祖宗没用上过,其实很简单,对任意非0数取模(当然小数也不存在取模这个东西,我们类比就行),我们其实可以统一这么算

1 double MOD(double a, double b) { // a % b
2     return a - floor(a / b) * b;
3 }

既然mod可以这样算,那么小数的gcd运算我们就可以得出

1 #define esp 1e-4
2 
3 double Decimal_gcd(double a, double b) {
4     return a >= esp ? Decimal_gcd(b - floor(b/a)*a, a) : b;
5 }

好,讲到这了,我们就来实战演练

http://codeforces.com/contest/1/problem/C

这道题就是小数最大公约数的经典例子,大家可以去尝试一下。

下面是我的答案

 1 #include<bits/stdc++.h>
 2 #define eps 1e-4
 3 #define pie acos(-1.0)
 4 #define pows(x) ((x)*(x))
 5 
 6 using namespace std;
 7 typedef double intd;
 8 
 9 intd e[3], tri[3];
10 
11 intd dis(intd x1,intd y1,intd x2,intd y2) { //计算边长 
12     return sqrt(pows(x2-x1)+pows(y2-y1));
13 }
14 
15 intd gettri(int i) { //得到边i所对应的圆心角,余弦定理 
16     intd s=0.0,m=2.0;
17     for(int j=0;j<3;j++) if(i!=j)
18         s += e[j] * e[j], m *= e[j];
19     intd temp = (s - e[i]*e[i])/m;
20     return acos(temp);
21 }
22 
23 intd gcd(double a, double b) {
24     return a >= eps ? gcd(b - floor(b/a)*a, a) : b;
25 }
26 
27 int main() {
28     intd a[3], b[3];
29     for(int i=0;i<3;i++)
30         scanf("%lf%lf", &a[i], &b[i]);
31     
32     int cn = 0;
33     for(int i=0;i<3;i++)
34         for(int j=i+1;j<3;j++)
35             e[cn++] = dis(a[i],b[i],a[j],b[j]); //得到三边 
36     
37     for(int i=0;i<3;i++)
38         tri[i] = gettri(i);
39     
40     intd g = gcd(tri[0], gcd(tri[1], tri[2]));
41     intd R = e[0]/(2.0*sin(tri[0]));
42     
43     g *= 2.0;
44     printf("%.6f\n", 2.0*pie/g * pows(R)*sin(g)/2.0);
45     return 0;
46 }

 

转载于:https://www.cnblogs.com/UtopioSPH001/p/yswness0003.html

Linux下OpenFire+Spark即时通讯环境搭建全攻略(含证书错误解决方案) 本文提供了一份详尽的Linux环境下OpenFire服务器与Spark客户端即时通讯系统的搭建与配置全攻略。内容涵盖从环境规划、服务端部署、数据库配置到客户端连接的全流程,并重点解决了Spark连接时常见的证书验证错误问题,为企业构建私有化、高可用的XMPP通讯平台提供了实战指导。 阅读详情

相关推荐

ESXI 与 OPNSense 配合

国庆期间在家里更新曾经购买的设备,将曾经的单系统,加固为防火墙,多系统的网络架构,如下图: 网络架构 在 ESXI 系统中默认存在一个 vSwitch0 交换机,且其不能被修改名称,因此在此通过修改其对应绑定的上行网卡即可,具体如下: 设置 vSwitch0 上行链路 将 vmnic 0 (网口...

weixin_34050389的博客 2313

Ancient Berland Circus

Nowadays all circuses in Berland have a round arena with diameter 13 meters, but in the past things were different. In Ancient Berland arenas in circuses were shaped as a regular (equiangular) polyg...

lee371042的博客 449

手把手复现论文:SVPWM过调制I区与II区算法仿真(附MATLAB源码)

本文详细介绍了SVPWM过调制I区与II区算法的MATLAB仿真实现,从理论推导到Simulink建模逐步解析。通过源码示例展示幅值补偿和六边形跟踪等关键技术,帮助电力电子研究者掌握过调制算法的核心实现方法,适用于电机控制、变频器等工业应用场景。

weixin_28739079的博客 529

官方题解参考与分层复现方法论:把「参考答案」变成可复现资产

本文完整复盘安全实战「官方参考与分层复现方法论」:从授权测试环境切入,围绕信息收集与漏洞验证逐层展开,最终完成漏洞验证与影响面确认。文中给出完整复现步骤与验证方法,可作为安全工程师的实战参考。

kingx3的博客 21

数据可视化—power bi 基础操作汇总

数据来源: https://pan.baidu.com/s/1U_Y7rKfhnSKbLmh4FcUD_Q 提取码: yq5v 目录 基本功能与视图 编辑与查询—修改column案例 建立关联性 新增column与DAX完成总价运算 习题练习1:建立可视化图表 产品销售统计图 column拖曳可视化 1.基本功能与视图 ①基础操作界面 ②获取数据—以打开excel为例 ③数据文件基本视图 可视化形式:柱状图、数据、关联性 2.编辑与查询—修改column ①编辑与查询—数据处理界面 .

weixin_52730784的博客 2680

《UE4游戏开发》之 《查cook资源失败,问题记录》

当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。 下面就材质cook出错,增加一些日志,方便查找问题做简单记录 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMat.

qq_21919621的博客 2580

【FreeRTOS源码学习笔记】任务创建

【FreeRTOS源码学习笔记】任务创建

2502_90565057的博客 459

3GPP LTE/NR信道模型

CDL(Clustered Delay Line):簇延迟线模型,包括CDL-A、CDL-B、CDL-C三个用于NLOS的信道模型,以及CDL-D、CDL-E两个用于LOS的信道模型。

LinkEverything的博客 1万+

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 270

EDEM-FLUENT耦合报错几大原因总结(持续更新)

EDEM-FLUENT耦合报错几大原因总结(持续更新)

zheaa的博客 2760

主流反爬虫、反作弊防护与风控对抗手段

主流反爬虫、反作弊风控防护中的核心设计点与对抗策略

吴秋霖的博客 2554

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 364

流体仿真软件:COMSOL Multiphysics二次开发_(3).流体仿真基础理论

流体仿真基础理论包括流体的基本性质、流体运动方程、边界条件、初始条件、湍流模型和网格生成等。在使用COMSOL Multiphysics进行流体仿真时,正确设置这些参数和条件是获得准确仿真结果的关键。通过实际应用案例,可以更好地理解如何在COMSOL中进行流体仿真,并提取和分析仿真结果。希望本文对流体仿真初学者和从业人员有所帮助。

kkchenjj的博客 1341

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 553

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 17

26-下载中心按哈希分目录存文件

为解决大导出文件存储的扩展性与一致性问题,采用哈希分目录策略:以任务 key 前四位划分为两级子目录,结合安全文件名构建路径(如 a3/f9/a3f9c2e1..._orders.xlsx),实现文件分散存储。业务库仅保存任务状态与 key,下载中心通过内网接口接收文件流并管理持久化,支持无状态扩容。配合内存索引与定期清理作业,确保元数据与文件一致。该方案有效避免单目录膨胀、提升性能,并通过共享令牌控制访问,保障安全性。

CAthlete的博客 179

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 337

模拟实现 map 和 set —— 基于红黑树的复用设计

/ 三叉链,便于迭代器 -- / ++ 向上回溯T _data;Color _col;, _data(data), _col(RED) // 新结点默认红色{}设计决策目的收益模板参数T而非K, V让同一棵树同时容纳K和pair<K,V>一次实现,两处复用KeyOfT仿函数从T中抽出真正的 key 进行比较map 只以 key 排序,符合语义迭代器用nullptr表示 end结合"向祖先回溯"的++逻辑无需额外标记位,天然对齐Insert返回同时告知位置与是否新插。

2603_95728536的博客 501

【数据结构-2】顺序表的实现

线性表是一种数据结构,它分为逻辑结构和物理结构,在逻辑结构上线性表是呈线性的,数据是是连续存储的;在物理结构(物理空间)上,线性表不一定是连续存储的。线性表的实现,主要分为数组和链式结构。顺序表是线性表的一种实现方式,顺序表在逻辑结构和物理结构上都是连续的。顺序表的底层实现是数组。

weixin_44218929的博客 207

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 176

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 365

Lehmer Code(莱默码):离散化 + 树状数组求右侧严格小于元素个数

本文介绍莱默码(Lehmer Code)的高效求解方法。针对排列中每个元素右侧严格小于它的个数,采用“离散化+树状数组”策略:先将数值映射到1~N的排名,再从右向左扫描,利用树状数组动态维护已处理元素,每次查询小于当前值的个数并插入当前元素。时间复杂度O(N log N),空间复杂度O(N),适用于N ≤ 10⁵的大规模数据,避免了暴力O(N²)的超时问题。

冻柠茶飞冰走茶 306

Java 项目实战: 交友项目 - 小视频模块实战:访客记录、FastDFS 存储与 SpringCache 缓存

本文实现小视频模块核心功能:基于MongoDB记录“谁看过我”访客数据,使用FastDFS分布式文件系统存储视频与缩略图,通过Dubbo服务完成发布与列表接口。结合Spring Cache注解(@Cacheable/@CacheEvict)对视频列表缓存30秒,发布后自动清空缓存,提升性能并保证数据实时性。工程新增视频、访客实体及缓存配置,三条技术线(MongoDB、FastDFS、Redis)协同支撑完整链路。

Wang的专栏 311

C++相交链表和反转链表详解

相交链表和反转链表是两道方向不同、但都依赖「指针重新接线」的基础题。前者问两个单链表是否共用某段后继,后者要求把整条链表的指向完全颠倒。放在一起讲,是因为它们共享同一套底层技能:知道什么时候要暂存next、知道循环结束时哪个指针是新的头、知道空链表和单结点这些边界怎么处理。常见的误解有三个。第一,判断相交时比较结点的值,而不是结点地址——值相同的两个独立结点会被误判成公共结点。第二,反转链表时先把cur->next改成prev,再去读cur->next找下一个结点,结果读到的是已经改掉的值,链表断裂。

eggwyw的博客 151

头歌 数据结构——C&C++线性表实训

本系列任务围绕线性表的链式实现,依次完成顺序构建、逆序构建、排序插入、查找、删除、求长度及栈、队列、集合等应用。通过动态内存分配与指针操作,掌握单链表的基本操作与实际应用,涵盖插入、删除、遍历、搜索等核心功能,最终实现数据结构在典型场景中的灵活运用。

一名敲代码的苦13程序员 234

MoE 剪掉 25% 专家:Qwen3 数学只掉 1.3 点

MoE模型部署成本主要来自显存,而非算力——尽管仅激活部分专家,但所有专家需常驻显存。传统按激活频率剪枝忽视了专家间的结构性冗余。本文通过熵有效秩、稳定秩与有效模态数三指标揭示:专家输出实际分布在低维子空间,分布模态远少于名义数量(如128专家仅27.2个有效模态)。据此提出结构保持剪枝方法PEEP与DCEP,基于函数子空间与分布几何贪心选集,显著提升剪枝效率:Qwen3-30B-A3B保留75%专家时数学得分仅降1.3点,优于SOTA;DeepSeek-V2-Lite砍至50%仍保关键性能。

Arborseek的博客 379
上一篇: CFGym 100198C (Strange Counter)
下一篇: Least Cost Bracket Sequence Codeforces 3D 贪心(说得轻巧)
arxd45524
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值