HDU1071——The area,HDU1072——Nightmare,HDU1073——Online Judge

news2024/11/15 10:36:04

目录

HDU1071——The area

题目描述

运行代码

代码思路

HDU1072——Nightmare

题目描述

运行代码

代码思路

HDU1073——Online Judge

题目描述

运行代码

代码思路

HDU1071——The area

题目描述

Problem - 1071

运行代码

#include <iostream>
#include <cmath>
#include<stdio.h>
#include<algorithm>
// 计算抛物线和直线围成的面积
double calculateArea(double x1, double y1, double x2, double y2, double x3, double y3) {
    // 抛物线顶点为 (x1, y1),设抛物线方程为 y = a(x - x1)^2 + y1
    // 通过 (x2, y2) 和 (x3, y3) 两点求出直线方程 y = kx + b

    double a, k, b;

    // 计算抛物线系数 a
    if (x2 != x1 && x3 != x1) {
        a = (y2 - y1) / pow((x2 - x1), 2);
    }
    else {
        std::cerr << "Invalid input: x2 or x3 cannot be equal to x1." << std::endl;
        return -1;
    }

    // 计算直线斜率 k 和截距 b
    k = (y3 - y2) / (x3 - x2);
    b = y2 - k * x2;

    // 积分计算面积
    double area = 0;
    double left = std::min(x2, x3);
    double right = std::max(x2, x3);

    for (double x = left; x <= right; x += 0.0001) {
        double yParabola = a * pow((x - x1), 2) + y1;
        double yLine = k * x + b;
        area += std::abs(yParabola - yLine) * 0.0001;
    }

    return area;
}

int main() {
    int T;
    std::cin >> T;

    while (T--) {
        double x1, y1, x2, y2, x3, y3;
        std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

        double area = calculateArea(x1, y1, x2, y2, x3, y3);
        std::printf("%.2f\n", area);
    }

    return 0;
}

代码思路

calculateArea 函数

  1. 首先,根据给定的顶点 (x1, y1) 以及另外两个点 (x2, y2) 和 (x3, y3) 来计算抛物线和直线的参数。
    • 对于抛物线,通过 (x1, y1) 和 (x2, y2) 计算出系数 a,前提是 x2 和 x1 不相等。
    • 对于直线,通过 (x2, y2) 和 (x3, y3) 计算出斜率 k 和截距 b 。
  2. 然后,通过积分的思想来近似计算抛物线和直线所围成的面积。
    • 确定积分的区间,即 x 的范围为 x2 和 x3 中的较小值到较大值。
    • 对于区间内的每个小间隔 0.0001,计算对应的抛物线纵坐标 yParabola 和直线纵坐标 yLine 的差值的绝对值,乘以间隔宽度 0.0001 ,并累加到面积 area 中。

main 函数

  1. 读取测试用例的数量 T 。
  2. 在每个测试用例中,读取三个交点的坐标。
  3. 调用 calculateArea 函数计算面积。
  4. 使用 printf 以保留两位小数的格式输出计算得到的面积。

HDU1072——Nightmare

题目描述

Problem - 1072

运行代码

#include <iostream>
#include <queue>
#include <string.h>

using namespace std;

char mapp[9][9];
int vis[9][9];
int dis[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};
int n, m, f_x, f_y;

// 坐标结构体,存储总时间,和炸弹倒计时
struct Coordinate {
    int x, y, to_time, now_time;
};

// 判断越界等状况
bool judge(int x, int y) {
    if (x < 0 || y < 0 || x >= n || y >= m || mapp[x][y] == '0') return false;
    return true;
}

int bfs(int x, int y) {
    int i;
    queue<Coordinate> q;
    Coordinate a, b;
    memset(vis, 0, sizeof(vis));

    // 对队列与起点的初始化
    vis[x][y] = 6;
    a = {x, y, 0, 6};
    q.push(a);

    while (!q.empty()) {
        a = q.front();
        q.pop();

        if (a.x == f_x && a.y == f_y) return a.to_time;

        for (i = 0; i < 4; ++i) {
            b.x = a.x + dis[i][0];
            b.y = a.y + dis[i][1];

            if (judge(b.x, b.y)) {
                // 如果踩到重置时间
                if (mapp[b.x][b.y] == '4') {
                    if (a.now_time == 1) continue;
                    b = {b.x, b.y, a.to_time + 1, 6};
                } else {
                    b = {b.x, b.y, a.to_time + 1, a.now_time - 1};
                }
                // 判断后到达的此点剩余时间是否 大于 之前到达这个点剩余时间
                if (b.now_time <= vis[b.x][b.y]) continue;
                vis[b.x][b.y] = b.now_time;
                q.push(b);
            }
        }
    }

    return -1;
}

int main() {
    int total_case, i, j;
    int s_x, s_y;

    cin >> total_case;
    while (total_case--) {
        cin >> n >> m;
        // 输入时记录起点与终点坐标
        for (i = 0; i < n; ++i) {
            for (j = 0; j < m; ++j) {
                cin >> mapp[i][j];
                if (mapp[i][j] == '2') {
                    s_x = i;
                    s_y = j;
                }
                if (mapp[i][j] == '3') {
                    f_x = i;
                    f_y = j;
                }
            }
        }
        cout << bfs(s_x, s_y) << endl;
    }
    return 0;
}

代码思路

整体思路
这段代码主要实现了一个使用广度优先搜索(BFS)算法来解决一个在特定地图上的时间相关的路径搜索问题。

数据结构

  • mapp[9][9] 用于存储地图信息,不同的字符表示不同的地图元素。
  • vis[9][9] 用于记录每个位置被访问时的剩余时间。
  • dis[4][2] 表示四个方向的偏移量,用于在搜索时向四个方向移动。

结构体 Coordinate:定义了一个结构体来存储坐标 x 和 y,以及到达该坐标的总时间 to_time 和当前剩余时间 now_time

函数 judge:用于判断给定的坐标是否合法,即是否越界或遇到不可通过的区域(值为 '0')。

函数 bfs:这是 BFS 的核心函数。

  1. 初始化队列 q,将起点加入队列,并设置起点的访问时间 vis 为 6 。
  2. 当队列不为空时,取出队首元素。
  3. 如果队首元素的坐标就是终点坐标,返回总时间。
  4. 对于四个方向,计算新的坐标。
  5. 如果新坐标合法:如果踩到重置时间(值为 '4')且当前剩余时间不为 1,则更新新坐标的总时间和剩余时间为 6,并在新的剩余时间大于之前记录的剩余时间时,将新坐标加入队列并更新访问时间。如果不是踩到重置时间,则更新新坐标的总时间和剩余时间,并在新的剩余时间大于之前记录的剩余时间时,将新坐标加入队列并更新访问时间。

主函数 main

  1. 读入测试用例的数量 total_case 。
  2. 在每个测试用例中,读入地图的大小 n 和 m 。
  3. 读入地图信息,同时记录起点和终点的坐标。
  4. 调用 bfs 函数进行搜索,并输出结果。

解题思路
通过 BFS 逐层扩展搜索,根据地图中的元素和时间规则,找到从起点到终点的最短时间路径。在搜索过程中,利用 vis 数组记录每个位置的最优时间,避免重复访问和无效搜索,最终找到满足条件的最短时间。

HDU1073——Online Judge

题目描述

Problem - 1073

运行代码

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

// 去除字符串中的空格、制表符和换行符
void eraseSpecialChars(string& s) {
    s.erase(remove(s.begin(), s.end(), ' '), s.end());
    s.erase(remove(s.begin(), s.end(), '\t'), s.end());
    s.erase(remove(s.begin(), s.end(), '\n'), s.end());
}

int main() {
    int t;
    cin >> t;

    while (t--) {
        vector<string> correctLines, userLines;
        string line;

        // 读取正确输出
        while (getline(cin, line)) {
            if (line == "START") {
                continue;
            }
            else if (line == "END") {
                break;
            }
            correctLines.push_back(line);
        }

        // 读取用户输出
        while (getline(cin, line)) {
            if (line == "START") {
                continue;
            }
            else if (line == "END") {
                break;
            }
            userLines.push_back(line);
        }

        bool isAccepted = true;  // 假设是已接受

        // 比较每行是否相同
        for (size_t i = 0; i < max(correctLines.size(), userLines.size()); ++i) {
            if (i >= correctLines.size() || i >= userLines.size() || correctLines[i] != userLines[i]) {
                isAccepted = false;
                break;
            }
        }

        if (isAccepted) {
            cout << "Accepted" << endl;
        }
        else {
            string correctStr, userStr;
            for (const auto& line : correctLines) {
                correctStr += line + '\n';
            }
            for (const auto& line : userLines) {
                userStr += line + '\n';
            }
            eraseSpecialChars(correctStr);
            eraseSpecialChars(userStr);

            if (correctStr != userStr) {
                cout << "Wrong Answer" << endl;
            }
            else {
                cout << "Presentation Error" << endl;
            }
        }
    }

    return 0;
}

代码思路

  1. 先,定义了一个函数 eraseSpecialChars 用于去除字符串中的空格、制表符和换行符。

  2. 在 main 函数中,首先读取测试用例的数量 t 。

  3. 对于每个测试用例,使用两个 vector 分别存储正确输出的行 correctLines 和用户输出的行 userLines 。

  4. 通过循环使用 getline 函数读取输入,将有效的行分别添加到对应的 vector 中。

  5. 初始化一个标志 isAccepted 为 true ,表示假设结果是已接受的。

  6. 然后遍历两个 vector 比较每行的内容,如果有不同则将 isAccepted 置为 false 并退出循环。

  7. 如果 isAccepted 仍然为 true ,说明结果是已接受的,输出 "Accepted" 。

  8. 如果 isAccepted 为 false ,则将两个 vector 中的内容连接成字符串 correctStr 和 userStr ,并调用 eraseSpecialChars 函数去除特殊字符。

  9. 比较去除特殊字符后的两个字符串,如果不同输出 "Wrong Answer" ,否则输出 "Presentation Error" 。

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

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

相关文章

CloudWeGo新手教程视频:手把手教你从0到1打造电商商城微服务demo

概要 Gomall 电商项目视频教程&#xff0c;由 CloudWeGo 技术社区出品&#xff0c;旨在帮助开发者掌握 Go 语言项目开发和微服务架构。教程通过演示 CloudWeGo 项目中的 Kitex 和 Hertz 框架&#xff0c;引导 Go 初学者学习常见的技术和开源中间件。 观看教程请访问&#xff…

高效灵活 | 前端利器 Vue.js 是一个构建用户界面的渐进式框架。

Vue.js 是一个构建用户界面的渐进式框架。 官网&#xff1a;https://cn.vuejs.org/ 基本特性 数据驱动&#xff1a;通过响应式机制&#xff0c;实现数据的变化自动触发视图的更新。 组件化架构&#xff1a;高度可复用的组件结构&#xff0c;提升代码组织性和可维护性。 虚拟…

爬虫-实战爬取虎扑ACG帖子

要求如下: 爬取虎扑步行街 ACG 版面的数据,要求使用多线程来并发爬取。范围是第一页的所有帖子,每个帖子包含标题、主题内容和第一页的所有回复内容。最后打印出爬到的所有帖子的标题。 网址是:ACG圈 - 虎扑社区。 针对上面的要求,我们进行分析: 首先是要使用多线程范…

YOLO5项目目录最强解析

YOLO5项目目录解析 YOLOv5 项目目录下的文件和目录的结构&#xff0c;以下是对每个目录和文件的解释&#xff1a; 目录 &#x1f4c1; .github: 存放 GitHub 相关配置和文件&#xff0c;如 GitHub Actions 工作流文件、Issue 模板等&#xff0c;用于自动化构建和持续集成等功…

Java编写SIP协议

1、编写Server代码 package com.genersoft.iot.vmp.sip; import javax.sip.*; import javax.sip.message.*; import javax.sip.header.*; import java.util.*;public class SimpleSipServer implements SipListener {private SipFactory sipFactory;private SipStack sipStack…

神经网络的参数初始化【PyTorch】

文章目录 1、常见初始化方法2、代码2.1、导包&#xff1a;2.2、均匀分布随机初始化2.3、固定初始化2.4、全0初始化2.5、全1初始化2.6、正态分布随机初始化2.7、kaiming 初始化2.8、xavier 初始化2.9、完整代码 3、小节 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专…

哨兵Sentinel-2一些有趣的示例

每天我们都会观察周围的世界。在许多情况下&#xff0c;我们认为我们所看到的事物是不言而喻的&#xff0c;它们只是我们所认为的那样。其他时候&#xff0c;我们会更仔细地分析和询问那些看起来不太熟悉的事物。有时&#xff0c;仅仅改变我们的视觉视角就能提供额外的启发和启…

html实现我的博客文章相册源码

文章目录 1.设计来源1.1 相册界面1.2 相册详细界面1.3 文章界面1.4 文章详细界面1.5 关于我1.6 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;http…

轻松上手MYSQL:JSON函数实现高效数据查询与操作

&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索MYSQL字符串函数之旅✨ &#x1f44b; 大家好&#xff01;文本学习和探…

「ETL趋势」定时任务自动化导出Excel/CSV,高效归档业务明细数据

目录 一、Excel/CSV文件输出应用场景 二、Excel/CSV文件输出的常见问题 三、合同订单数据文件输出实战 1&#xff09;合同订单数据输出为 CSV 文件 1、建立业务系统数据库、FTP/SFTP 服务器数据连接 2、数据处理 3、输出为文件 4、运行效果查看 2&#xff09;合同订单数据输出为…

数据结构第七讲:栈和队列OJ题

数据结构第七讲&#xff1a;栈和队列OJ题 1.有效的括号2.用队列实现栈3.用栈实现队列4.设计循环队列 1.有效的括号 链接: OJ题目链接 typedef char StackDataType;typedef struct Stack {StackDataType* arr;//使用一个指针来指向开辟的数组int capacity;//保存数组的空间大…

concrt140.dll丢失是什么情况?有效的解决dll!

concrt140.dll文件丢失是电脑中少见的文件&#xff0c;但也会因为某些原因会导致电脑丢失concrt140.dll文件&#xff0c;那么出现这文件的原因是什么呢&#xff1f;出现这样的问题有什么办法可以将concrt140.dll修复呢&#xff1f;一起来看看吧。 为什么会缺失concrt140.dll文件…

前端:数字世界的门面与灵魂

在当今数字化时代&#xff0c;前端作为用户与网站或应用直接交互的界面&#xff0c;其重要性不言而喻。它不仅是信息的展示窗口&#xff0c;更是用户体验&#xff08;UX&#xff09;和用户界面&#xff08;UI&#xff09;设计的核心。本文将深入剖析前端在整体网站或应用中的重…

vscode 创建QT最简工程

1. 前提条件 qt 安装cmake安装 参考&#xff1a; https://blog.csdn.net/qq_51355375/article/details/139890889vscode 环境配置 参考&#xff1a; https://blog.csdn.net/qq_51355375/article/details/140733495 2. 工程创建 include 放头文件src .cpp 文件CMakeList.tex …

物品租赁小程序论文(设计)开题报告

一、课题的背景和意义 近些年来&#xff0c;随着移动互联网巅峰时期的来临&#xff0c;互联网产业逐渐趋于“小、轻、微”的方向发展&#xff0c;符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中&#xff0c;被誉为“运行着程序的网站”之名的微信小程序…

搭建开发环境

1、安装VMware 参考01【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.2 2、安装ubuntu 参考01【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.2 2.1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执…

C#使用NModbus4库创建Modbus TCP Slave(服务器)简单示例

本文续上篇Codesys—标准库ModbusTCP Master(客户端)配合C#的NModbus4库的通讯示例 链接&#xff1a;https://blog.csdn.net/wushangwei2019/article/details/136375234?spm1001.2014.3001.5501 上篇描述在Codesys端的Modbus TCP Master(客户端)的设备添加、IO映射、通讯简单…

机器视觉12-相机

相机 作用: 工业相机 是 机器视觉系统 的重要组成部分 最本质的功能就是通过CCD或CMOS成 像传感器将镜头产生的光信号转变为 有序的电信号&#xff0c;并将这些信息通过相 应接口传送到计算机主机 工业相机分类 目前业内没有对相机进行明确的分类定义&#xff0c; 以下分类是…

svn软件总成全内容

SVN软件总成 概述&#xff1a;本文为经验型文档 目录 D:\安装包\svn软件总成 的目录D:\安装包\svn软件总成\svn-base添加 的目录D:\安装包\svn软件总成\tools 的目录D:\安装包\svn软件总成\tools\sqlite-tools-win32-x86-3360000 的目录D:\安装包\svn软件总成\安装包-----bt lo…

一分钟搞定文件翻译|2024年4款翻译工具,职场达人都在用!

在全球化的大环境下&#xff0c;跨国沟通和协作变得非常普遍。不管是在公司间谈生意&#xff0c;还是跟外国朋友聊天&#xff0c;翻译文件成了我们经常要做的事情。但是一大堆文件和各种各样的语言&#xff0c;怎么才能又快又好地翻译出来&#xff0c;提升工作速度呢&#xff1…