1 条题解

  • 0
    @ 2024-10-20 20:12:55

    题解:

    
    int main()
    
    {
    
      int t,rp, sl, k1, k2;
    
      scanf("%d%d%d", &t, &rp, &sl);
    
      t *= 60;
    
      k2 = rp / 5000;
    
      if (k2 % 5000 != 0)//先保证研发点数够
    
      {
    
        k2 += 1;
    
      }
    
      t = t - k2 * 8;
    
      sl = sl - k2 * 20000;
    
      k1 = t / 5;//击落敌机数
    
      if (sl < k1 * 40000&& (k1 * 40000 - sl) / 20000<k1)
    
      {
    
        k2 += (k1*40000-sl) / 20000;
    
        k1 -= (k1 * 40000 - sl) / 20000;
    
      }
    
      else if (sl < k1 * 40000 && (k1 * 40000 - sl) / 20000 >= k1)
    
      {
    
        k2 += k1;
    
        k1 = 0;
    
      }
    
        
    
      printf("%d %d", k1, k2);
    
    }
    
    
    

    解题思路:由于炸战区次数优先,所以先根据研发点数需求算出要炸几次战区,再考虑杀敌.然后再根据多余的银狮判断是否需要把杀敌次数削减到刚好满足银狮要求.

    要点1:所有数据中有60%银狮富裕是远远大于研发点数的,所以要考虑多余的次数要记为炸战区

    要点2:有的情况下k1可能为负数,但其实k1为0时也满足条件,要额外注意

    TIPS:大一新生从来没用过这个,出的题挺简单的,数据也很粗糙.

    • 1

    信息

    ID
    213
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    131
    已通过
    30
    上传者