zoukankan      html  css  js  c++  java
  • Doors Breaking and Repairing

    题目链接:Doors Breaking and Repairing

    题目大意:有n个门,先手攻击力为x(摧毁),后手恢复力为y(恢复),输入每个门的初始“生命值”,当把门的生命值攻为0时,就无法恢复了。问:最多可以把几个门的生命值攻为0

    思路:(1)当 x>y 的时候肯定所有的门的生命值都能降为0

       (2)当 x<=y 的时候,先手的最优策略就是每次去攻击那些当前“生命值”比自己攻击力小的门,使它们的生命值降为0;

         后手的最优策略就是去提高那些“生命值”比先手小的门的“生命值”,来减少先手“攻破”的门的数量,

         那些“生命值”本来就比先手攻击力高的先手就更攻破不了了;所以直接用门的“”生命值”小于等于x的门的个数除以2向上取整即可。

     1 /* */
     2 # include <bits/stdc++.h>
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 ll a[110005];
     7 int main()
     8 {
     9     int n, x, y, num=0, sum=0;
    10     cin>>n>>x>>y;
    11     for(int i=1; i<=n; i++ )
    12     {
    13         cin>>a[i];
    14         if( a[i]<=x )
    15             sum++;
    16     }
    17     if( x<=y )
    18         cout<<ceil(sum/2.0)<<endl;
    19     else
    20         cout<<n<<endl;
    21     return 0;
    22 }
  • 相关阅读:
    leetcode第14题最长公共前缀
    什么是神经网络
    获取url "?" 后面的字符串
    第一天
    C#和.Ne学习第九天
    C#和.Ne学习第八天
    格式化输出
    C#和.Ne学习
    C#和.Ne学习第七天
    C#类型转换
  • 原文地址:https://www.cnblogs.com/wsy107316/p/11440712.html
Copyright © 2011-2022 走看看