zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 74 (Rated for Div. 2) B. Kill 'Em All

    链接:

    https://codeforces.com/contest/1238/problem/B

    题意:

    Ivan plays an old action game called Heretic. He's stuck on one of the final levels of this game, so he needs some help with killing the monsters.

    The main part of the level is a large corridor (so large and narrow that it can be represented as an infinite coordinate line). The corridor is divided into two parts; let's assume that the point x=0 is where these parts meet.

    The right part of the corridor is filled with n monsters — for each monster, its initial coordinate xi is given (and since all monsters are in the right part, every xi is positive).

    The left part of the corridor is filled with crusher traps. If some monster enters the left part of the corridor or the origin (so, its current coordinate becomes less than or equal to 0), it gets instantly killed by a trap.

    The main weapon Ivan uses to kill the monsters is the Phoenix Rod. It can launch a missile that explodes upon impact, obliterating every monster caught in the explosion and throwing all other monsters away from the epicenter. Formally, suppose that Ivan launches a missile so that it explodes in the point c. Then every monster is either killed by explosion or pushed away. Let some monster's current coordinate be y, then:

    if c=y, then the monster is killed;
    if y<c, then the monster is pushed r units to the left, so its current coordinate becomes y−r;
    if y>c, then the monster is pushed r units to the right, so its current coordinate becomes y+r.
    Ivan is going to kill the monsters as follows: choose some integer point d and launch a missile into that point, then wait until it explodes and all the monsters which are pushed to the left part of the corridor are killed by crusher traps, then, if at least one monster is still alive, choose another integer point (probably the one that was already used) and launch a missile there, and so on.

    What is the minimum number of missiles Ivan has to launch in order to kill all of the monsters? You may assume that every time Ivan fires the Phoenix Rod, he chooses the impact point optimally.

    You have to answer q independent queries.

    思路:

    模拟, 记录往右移的总长度.挨个判断.

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    set<int> St;
    int n, r;
    
    int main()
    {
            int t;
            cin >> t;
            while (t--)
            {
                    St.clear();
                    cin >> n >> r;       
                    int v;
                    for (int  i = 0; i < n; i++)
                    {
                            cin >> v;
                            St.insert(v);
                    }
                    int cnt = 0, sum = 0;
                    while (!St.empty())
                    {
                            while (!St.empty() && *St.begin()-sum <= 0)
                                    St.erase(*St.begin());
                            
                            if (St.empty())
                                    break;
                            cnt++, sum += r;
                            St.erase(*St.rbegin());
                    }
                    cout << cnt << endl;
            }
            
    
            return 0;
    }
    
  • 相关阅读:
    Leetcode [654] 最大二叉树 &[105] 从前序与中序遍历序列构造二叉树 & [106] 从中序与后序遍历序列构造二叉树
    Leetcode [226] 翻转二叉树 & [116] 填充每个节点的下一个右侧节点指针 & [114] 二叉树展开为链表
    Leetcode 链表&二叉树刷题总结
    Leetcode 动态规划刷题总结
    Leetcode [1312] 让字符串成为回文串的最少插入次数 动态规划
    Leetcode [234] 回文链表 回文 链表
    动态规划之 KMP 算法详解(转)
    Leetcode [99] 恢复二叉搜索树 二叉树
    统计代码行数
    二叉树遍历(递归、非递归、mirror)转
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11685922.html
Copyright © 2011-2022 走看看