CodeForces - 586C Gennady the Dentist 模拟(数学建模的感觉)

http://codeforces.com/problemset/problem/586/C

题意:1~n个孩子排成一排看病。有这么一个模型:孩子听到前面的哭声自信心就会减弱:第i个孩子看病时会发出v[i]的叫声,他后面的那个人的自信心(不是p[i+1])会减少v[i],再后面一个会减少v[i]-1,如此下去直到声音减弱为0.若某个人的自信心小于0,则他哭着跑回家,他身后的所有人会减掉d[i] 的自信。

题解:直接模拟很困难,有一个想法是将逃跑的孩子的声音和将他吓跑的(正在接诊的)声音叠加成s,省去了每次对逃跑的孩子后面所有人-d[i]的循环。

坑:

考虑如果第五个人走了,第六个人就会走到第四个人后面,这样他就会减v[4]而不是v[4]-1,所以碰到已经跑了的小孩要跳过。

我一开始还忘了减d[i]...还想递归写。。。

ac

#define  _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<string.h>
using namespace std;
typedef long long ll;
const int maxn = 4000 + 5;
int v[maxn], d[maxn], p[maxn];
int e[maxn];
vector<int> ans;
int n;
void run(int j) {
    for (int k = j; k <= n; k++) {
        if (p[k] > 0 && p[k] - d[j] < 0) {
            run(k);
        }

    }
}
int main() {

    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> v[i] >> d[i] >> p[i];
    }
    for (int i = 1; i <= n; i++)
    {

        if (p[i] >= 0) {
            ans.push_back(i);
            for (int j = i + 1; j <= n; j++) {
                p[j] -= v[i];
                v[i]--;
                if (v[i] <= 0)break;
            }
        }
        else if (v[i]) {
            for (int j = i + 1; j <= n; j++) {
                p[j] -= d[i];
            }
        }
    }

    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); i++) cout << ans[i] << ‘ ‘;
    cin >> n;
}

原文地址:https://www.cnblogs.com/SuuT/p/8604136.html

时间: 2024-10-09 12:52:38

CodeForces - 586C Gennady the Dentist 模拟(数学建模的感觉)的相关文章

[ An Ac a Day ^_^ ] CodeForces 586C Gennady the Dentist 模拟

题意: n个小朋友去拔牙 每个小朋友在拔牙的时候会哭 哭声是vi分贝 距离门口vi远的小朋友听到了哭声会害怕 他们的勇气值p会减少d 如果勇气值p小于等于零 他们就会在门外哭并立即离开拔牙队列(回家找妈妈……) 这个哭声门外所有的小朋友都能听到 所以这个哭声会同时减少所有小朋友的勇气值 问最后有多少小朋友可以拔完牙 思路: 就是模拟一下这个过程 好像后面的小朋友哭了对前面的小朋友没有影响 WA了一次是因为结构体里没用long long…… 1 #include<stdio.h> 2 #incl

在数学建模中学MATLAB

为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137730824/article/details/39206823 对于任意文件夹的同一格式的图片的批量读取:http://blog.csdn.net/haizimin/article/details/39646595 关于MATLAB在微分/偏微分方程以及其他高等数学问题中的应用. 关于MATLAB在

【数学建模】创意平板折叠桌的模型分析与优化设计

? ? 创意平板折叠桌的模型分析与优化设计 魏淙铭 陈星曼 田桃 ? 摘要: 本题要求设计创意折叠桌,问题一给定了具体的长方形平板尺寸.桌高等设计参数求折叠桌的动态变化过程和桌脚边缘线的数学描述,问题二中任意给定桌高和桌面直径求折叠桌的最优设计参数,问题三则要求根据客户提供的桌面边缘线和桌脚边缘线的大致形状给出一款能够确定最优设计参数的软件的数学模型. 本题中,我们以折叠桌桌面中心为圆心,建立空间坐标系求解数学模型. 对于问题一,我们通过使用切片法降低维数来确定桌腿长度.开槽的长度等设计参数,并

数学建模常用的十大算法

数学建模常用的十大算法==转 (2017-07-16 11:26:14) 转载▼ 1. 蒙特卡罗算法.该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法. 2. 数据拟合.参数估计.插值等数据处理算法.比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MATLAB 作为工具. 3. 线性规划.整数规划.多元规划.二次规划等规划类算法.建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算

【数学建模】【APIO2015】Palembang Bridges

Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 1000000000.相邻的每对建筑相隔 1 个单位距离,河的宽度也是 1 个单位长度.区域 A 中的 i 号建筑物恰好与区域 B 中的 i 号建筑物隔河相对. 城市中有 N 个居民.第 i 个居民的房子在区域 Pi 的 Si 号建筑上,同时他的办公室坐落在 Qi 区域的 Ti 号建筑上.一个居民的房子和办公

2015 数学建模竞赛 入门与提高 读书笔记

<数学建模竞赛入门与提高> 第1章:数学建模概述 近半个多世纪以来,数学已经走进了各大领域,而与其他学科相结合形成交叉学科,首要的关键一步就是建立研究对象的数学模型,并加以计算求解,数学建模和计算机技术在知识经济时代的作用可谓是如虎添翼. 1.1  初入门径--认识数学模型与数学建模 数学建模就是用数学语言描述实际现象的过程,这里的实际现象包含具体的自然现象,也包含抽象的比如顾客对某种商品所取的价值倾向.这里的描述不但包括外在形态,内在机制的描述,也包括预测,试验和解释评价实际现象等内容. 数

数学建模学习笔记(建模中的十大常用算法总结)

数学建模中的十大常用算法 1.    蒙特卡洛方法: 又称计算机随机性模拟方法,也称统计实验方法.可以通过模拟来检验自己模型的正确性. 2.    数据拟合.参数估计.插值等数据处理 比赛中常遇到大量的数据需要处理,而处理的数据的关键就在于这些方法,通常使用matlab辅助,与图形结合时还可处理很多有关拟合的问题. 3.    规划类问题算法: 包括线性规划.整数规划.多元规划.二次规划等:竞赛中又很多问题都和规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件,几个函数表达式作为目标函

2018数学建模国赛总结(A题/编程选手视角)

2018数学建模已经告一段落了,先说说基本情况吧,我们队伍专业分别为:金融(A),会计(B),计算机(我),配置还算可以,他们俩会数据分析软件也会写论文,我可以写代码,画图.他们俩打过美赛(M奖),我只打过算法竞赛.这里特别提出,有会写论文的队友很重要,不是说会latex会排版就算会,还要知道论文基本架构,遣词造句,专业术语等等. 题目下来的晚上,我们就确定了A题,因为B题的话我们基本没有专业知识能用上的,什么都要现学,其实特别想做C题,推荐系统啊,经济学分析啊我们都做过,可惜选不了….确定题目

2019美国大学生数学建模竞赛B题(思路)

建模比赛已经过去三天了,但留校的十多天里,自己的收获与感受依然长存于心.下面的大致流程,很多并没有细化,下面很多情况都是在假设下进行的,比如假设飞机能够来回运送药品,运货无人机就只运货,在最大视距下侦查等. 题目下载:点击下载 首先,因为这道题中的变量太多,我们需要对变量的数量进行减小. 一.变量设置 二.约束条件 1.从基地运输到医院的药包量必须满足医院的需求. 2.无人机最大行驶距离能否满足来回医院. 三.目标函数 1.计算基地到医院的时间: 2.我们希望时间最优(最短),则取满足约束条件b