首页 > 其他分享 >UVA114 Simulation Wizardry

UVA114 Simulation Wizardry

时间:2023-08-05 09:03:17浏览次数:47  
标签:UVA114 pBumper ptPos 分值 Wizardry Simulation 弹板 ptNew nDir

UVA114 Simulation Wizardry

题目传送门

此题为模拟类型,必须认真读题,绝不能漏掉任何一个细节。

分析

解释代码中的主要部分:

  1. 结构体定义:struct POINT 用于表示二维坐标,struct BUMPER 用于表示弹板的信息,包括分值和消耗。

  2. pTable 数组:用于记录所有弹板的信息。数组的索引对应表面上的网格点,每个网格点上可能有一个弹板,通过指针 BUMPER* 存储弹板的信息。

  3. aDir 数组:表示四个方向,即向上、向右、向下、向左。

  4. 输入部分:程序首先从标准输入读取表面的尺寸、墙的消耗、弹板数量,然后循环读入每个弹板的坐标、分值和消耗,并将弹板信息存储到 pTable 数组中。

  5. 循环模拟每个球的移动:程序继续从标准输入读入每个球的起始坐标、起始方向和生命值。然后,通过一个嵌套循环来模拟每个球的移动过程。在每个时间步中,程序计算球在新位置的坐标,检查是否撞墙或撞击保险杠,根据撞击的情况更新球的分值和生命值,以及改变球的方向。循环终止条件是球的生命值小于等于 \(0\),表示球消失从表面。

  6. 输出:对于每个球,程序会输出球在每次撞击保险杠时得到的分值,然后将这一次撞击得到的分值累加到总分中。最后,程序输出所有球撞击保险杠得到的总分。需要注意的一些问题:

    • 表面网格的坐标从左下角开始,而数组索引是从 \(0\) 开始的,因此在读入弹板和球的坐标时需要适配数组索引。
    • 碰撞墙壁或保险杠时,球的方向会改变。具体地,撞墙时顺时针旋转 \(90\) 度,撞保险杠时逆时针旋转 \(90\) 度。
    • 每个球在撞击保险杠或墙壁时都会消耗生命值,生命值小于等于 \(0\) 时球消失。

下面奉上代码……

AC Code

#include <iostream>
using namespace std;
struct POINT { int x; int y; };
//记录弹板信息的结构体
struct BUMPER { int nValue; int nCost; };
int main(void) {
    //用二维数组记录所有弹板的信息,不存在弹板的位置为空指针
    BUMPER *pTable[52][52] = {0}, *pBumper;
    //按照题目指定的方向编号,设定移动偏移量
    POINT ptSize, ptPos, aDir[4] = { {1, 0}, {0, 1}, {-1, 0}, {0, -1} };
    int nWCost, nTotal = 0, nValue, nLife, nDir;
    //输入桌面尺寸、墙的消耗、弹板数量
    for (cin >> ptSize.x >> ptSize.y >> nWCost >> nTotal; nTotal-- > 0; ) {
        //循环读入每个弹板的坐标、分值以及消耗,并存入数组
        cin >> ptPos.x >> ptPos.y;
        pBumper = new BUMPER;
        cin >> pBumper->nValue >> pBumper->nCost;
        //弹板的坐标是以1起始的,需适配以0起始的数组地址
        pTable[ptPos.x - 1][ptPos.y - 1] = pBumper;
    }
    //桌面尺寸也需适配以0起始的数组地址
    ptSize.x -= 1, ptSize.y -= 1;
    //循环读入每个球的起始坐标,起始方向和生命值
    for (nTotal = 0; cin >> ptPos.x >> ptPos.y >> nDir >> nLife;) {
        //使坐标适配数组地址
        --ptPos.x, --ptPos.y;
        //循环移动小球,直到生命结束
        for (nValue = 0; --nLife > 0; ) {
            //建立新坐标变量存储移动后的值,以便移动失败时回退
            POINT ptNew = {ptPos.x + aDir[nDir].x, ptPos.y + aDir[nDir].y};
            //撞墙
            if (ptNew.x == ptSize.x || ptNew.y == ptSize.y ||
                ptNew.x < 1 || ptNew.y < 1) {
                //生命值减去墙的消耗并转向
                nLife -= nWCost;
                nDir = (nDir + 3) % 4;
                continue;
            }
            //碰到弹板
            if ((pBumper = pTable[ptNew.x][ptNew.y]) != 0) {
                //分值加上弹板的分值,生命值减去消耗并转向
                nValue += pBumper->nValue;
                nLife -= pBumper->nCost;
                nDir = (nDir + 3) % 4;
                continue;
            }
            //移动到空白格子
            ptPos = ptNew;
        }
        //总分累加这一次的分值并输出当前分值
        nTotal += nValue;
        cout << nValue << endl;
    }
    //输出总分,程序结束
    cout << nTotal << endl;
    return 0;
}

标签:UVA114,pBumper,ptPos,分值,Wizardry,Simulation,弹板,ptNew,nDir
From: https://www.cnblogs.com/cxy-xlf-1003/p/17607450.html

相关文章

  • Solution Set of NFLS SImulations
    在nfls的最后一天,来记录一些似乎有意义的题吧。没有原题(或者我忘了原题)的就简要写下题意,不放原题面了。目录T2(CF1329EDreamoonLovesAA)T1(CF1184D2ParallelUniverses(Hard))T3(CF1434EAConvexGame)T1怪兽(树上MonsterHunting)T2切割T3导弹T1(CF1023GPisc......
  • 风电分布式并网模型 Wind Farm Simulation Model。 Matlab/simulink
    风电分布式并网模型WindFarmSimulationModel。Matlab/simulink1、共2个火电厂,4个风电场,共15个节点。火电厂:1号火电厂,设定为SwingBus;2号火电厂,设定为PVBus。(在汽轮机调节器可进行调节励磁系统的控制方式)风电厂:4个风电厂;各个风电厂的风速可......
  • UE中Physical Simulation 模拟物理
    UE视窗中的物体默认是没有开启模拟物理的,因为太耗CPU.物理选项卡模拟物理选中物体,在Detail细节栏中,找到物理选项卡,找到模拟物理选项,单点选中便可。启用重力场景:两个物理都开启模拟物理,一个启用重力,一个关闭重力。结果:启用重力的会向下落;关闭重力的会飘在空中。Mass重量(公斤)会自动......
  • 图形学流体力学Fluid Simulation for Computer Graphics
    从水的飞溅,到火焰和烟雾的旋转,流体已经成为计算机图形学的一个重要组成部分。这本书旨在涵盖模拟这些动画效果的基本知识。让我们来看看控制它们运动的基本方程。动画中大多数有趣的流体流动都是由著名的incompressibleNavier-Stokes方程控制的。>>fluidenginedevelopment>>......
  • 论文阅读笔记《Grounded Action Transformation for Robot Learning in Simulation》
    GroundedActionTransformationforRobotLearninginSimulation发表于AAAI2017仿真机器人学习中的接地动作变换HannaJ,StoneP.Groundedactiontransformationforrobotlearninginsimulation[C]//ProceedingsoftheAAAIConferenceonArtificialIntelligence......
  • 论文阅读笔记《Stochastic Grounded Action Transformation for Robot Learning in Si
    StochasticGroundedActionTransformationforRobotLearninginSimulation发表于IROS2020(CCFC)模拟中机器人学习的随机接地动作转换DesaiS,KarnanH,HannaJP,etal.Stochasticgroundedactiontransformationforrobotlearninginsimulation[C]//2020IEEE......
  • Simulation-热换器热交换仿真分析在线课程预约
    SOLIDWORKSFlowSimulation允许产品工程师访问强大的CFD(计算流体力学)功能,从而帮助他们加快产品创新。FlowSimulation除了解决常规的流体问题(速度、压力、流量等)外,非常常用的一个功能就是解决流体热问题,温度在流体力学方面扮演着非常重要的角色,而很多产品本身就是能过热流来工作......
  • Lighting System Design uva11400
    设计一个照明系统,一共有n(n<=1000)种灯泡可供选择,不同种类的灯泡必须用不同的电源,同一种灯泡则可以用一个,输入为一个n,以下n行,每行四个数值,代表电压V,电源费用K,每个灯泡费用C,所需灯泡数量L。n=0为结束标志。为了省钱,你可以把一些灯泡换成电压更高的以节省电源的钱,但不能换成更低的,......
  • SOLIDWORKS Simulation仿真分析解决方案
    SOLIDWORKS Simulation是一个与SOLIDWORKS完全集成的设计分析系统。SOLIDWORKSSimulation提供了单一屏幕解决方案来进行应力分析、频率分析、扭曲分析、热分析和优化分析。SolidWorksSimulation凭借着快速解算器的强有力支持,使得您能够使用个人计算机快速解决大型问题。SOLI......
  • SOLIDWORKS Simulation仿真分析解决方案
    SOLIDWORKS Simulation是一个与SOLIDWORKS完全集成的设计分析系统。SOLIDWORKSSimulation提供了单一屏幕解决方案来进行应力分析、频率分析、扭曲分析、热分析和优化分析。SolidWorksSimulation凭借着快速解算器的强有力支持,使得您能够使用个人计算机快速解决大型问题。SOL......