首页 > 编程语言 >【算法】模拟

【算法】模拟

时间:2024-02-01 14:56:24浏览次数:19  
标签:24 bmod times 60 算法 include 蜗牛 模拟

模拟

模拟就是用代码模拟出题目所要求的操作。虽然本质上比较简单,但是码量大,很难调错。所以做模拟题的时候一定要先构思好再敲代码。

例题 1:

小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 \(1970\) 年 \(1\) 月 \(1\) 日 \(00:00:00\) 到当前时刻经过的毫秒数。现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,请将这个时间对应的时分秒输出。数据范围:给定的时间不超过 \(10^{18}\)。

我们直接把输入的时间 \(t\) 除以 \(1000\) 变成秒(毫秒和秒之间的进率为 \(1000\))。然后再时间转换,天为 \(t \bmod (60^2 \times 24) \div 60^2\),小时为 \(t \bmod (60^2 \times 24) \bmod 60^2 \div 60\),分钟为 \(t \bmod (60^2 \times 24) \bmod 60\)。这里为了方便,我们定义 \(d = 60^2 \times 24\),\(h = 60^2\),\(m = 60\)。时间复杂度 \(O(1)\)。注意,一定要开 long long

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>

using namespace std;

using ll = long long;

const int kMaxN = -1, kInf = (((1 << 30) - 1) << 1) + 1;
const ll kLInf = 9.22e18;
const ll d = 24 * 60 * 60, h = 60 * 60, m = 60; // 定义常量 d, h, m

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  ll t;
  cin >> t; // 输入 t
  t /= 1000; // 把 t 除以 1000(把毫秒转换成秒)
  ll day = t % d / h, hour = t % d % h / m, _min_ = t % d % m;
  // 计算天,小时,分钟(注意这里 min 只能定义成 _min_)
  printf("%02d:%02d:%02d", day, hour, _min_); // 输出,格式为 dd:hh:mm
  return 0;
}

例题 2:

一只长度不计的蜗牛位于 \(n\) 英寸深的井的底部。它每次向上爬 \(k\) 英寸,但是必须休息一次才能再次向上爬。在休息的时候,它滑落了 \(d\) 英寸。之后它将重复向上爬和休息的过程。蜗牛爬出井口需要至少爬多少次?如果蜗牛爬完后刚好到达井的顶部,我们也设作蜗牛已经爬出井口。

典型蜗牛爬井问题,模拟即可。
把蜗牛的高度存在一个变量里,初始为 \(0\),每次把变量加 \(k\),如果 \(\ge n\),跳出输出次数,否则 \(-d\)。

int h = 0, ans = 0;
for (; ; ) {
  h += k; // 爬了 k 英寸
  if (h >= n) { // 判断是否出井
    break; // 跳出循环
  }
  h -= d; // 掉了 d 英寸
}
cout << ans << '\n'; // 输出答案·

标签:24,bmod,times,60,算法,include,蜗牛,模拟
From: https://www.cnblogs.com/bc2qwq/p/18001204/imitate

相关文章

  • STM32CubeMX教程31 USB_DEVICE - HID外设_模拟键盘或鼠标
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板USB_OTG_FS为工作在HumanInterfaceDeviceClass(HID)(人机接口......
  • 代码随想录算法训练营第四天 |24. 两两交换链表中的节点 | 19.删除链表的倒数第N个节
    142.环形链表II 已解答中等 相关标签相关企业 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,......
  • 利用MYSQL+redis模拟消息队列
    1、插入数据库,获取自动编号,作为redis键名:functiontianjia(){$model=model(MqModel::class);$data=['rs'=>1];$model->insert($data);//插入$id=$model->getInsertID();pp($id);$key......
  • R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
    原文链接:http://tecdat.cn/?p=23836原文出处:拓端数据部落公众号我们使用R中的igraph包,产生了网络的图形。但是很难将这些图表放到演讲和文章中,因为图表很难根据需要定制。使用igraph中的绘图功能可以得到你想要的结果,但用ggplot对工作更有帮助。所以本文探索了一种在ggplot中创......
  • 文心一言 VS 讯飞星火 VS chatgpt (191)-- 算法导论14.2 1题
    一、用go语言,通过为结点增加指针的方式,试说明如何在扩张的顺序统计树上,支持每一动态集合查询操作MINIMUM、MAXIMUM、SUCCESSOR和PREDECESSOR在最坏时间O(1)内完成。顺序统计树上的其他操作的渐近性能不应受影响。文心一言:为了在扩张的顺序统计树上支持每一动态集合查询操作......
  • k_means算法
    C语言代码#include<iostream>usingnamespacestd;//定义点的结构体structpoint{doublex;//点的x坐标doubley;//点的y坐标intcentroid;//点所属的质心};//定义计算两点之间距离的函数doubledist(structpointa,structpointb){......
  • 指针扫描型字符串算法
    【最小表示法】最小表示法循环表示:从一个位置开始向后遍历,到末尾再倒回去最前面。一个字符串(数组)一共有\(n\)个。最小表示法就是最小的循环表示。例如,31491的最小表示法是13149.如果我们用打擂台比大小的方式,因为字符串之间比较需要时间,总共是\(O(n^2)\)的,太慢......
  • 字符串算法学习笔记
    \(\text{Pt.}1\)基础一、进制哈希二、Manacher三、Trie\(\text{Pt.}2\)自动机自动机是什么?它是一个对“信息序列”进行判定的数学模型。“信息序列”可以很随意,比如一个二进制数,比如一个字符串。而“判定”也可以很随意,比如判定一个二进制数是不是奇数,判定当前字符串是......
  • CEIT算法训练-双指针部分题解(T1-3)
    AnagramSearch题意简述两个字符串\(s\)和\(t\)相似的定义为:\(s\)可以打乱之后重新排列成为\(t\)。题目给出\(a\)和\(b\),问\(a\)中有多少子串(连续的一段)与\(b\)相似。同时,\(a\)中还含有\(?\)字符,他可以等价于任何字符(可以变成任何字符)解题思路实际上,根据题......
  • 《算法导论(原书第3版)》PDF
    内容简介在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步......