5937. 斩杀计划

Description
        众所周知,小J和小G是死对头,一天小G带领一群小弟找到了小J。
问题描述
        小G有n个小弟,第i个小弟有ai点攻击力,小G有m点血量。
        小J在小G找小第的时间里去找小Z学到了膜法,他在大战前配置了三种魔法药水
        1:复用型药水:花费1法力值,选择小G的攻击力小于等于2的一个小弟让他跟随自己(变为自己的小弟并且攻击力和属于小G时一样)
        2:猎人药水:花费4法力值,选择小G的攻击力小于等于3的一个小弟让他跟随自己
        3:腐败药水:花费1法力值,使小G所有小弟攻击力降低三点(使用前两种魔法将小弟拉到自己阵营时小弟攻击力就是当前的攻击力,即小J的小弟攻击力只能为1,2,3)
        为了向小G展现自己的力量,他打算在召集到一些小弟后发动攻击(每个小弟打一次)直接秒杀小G(攻击力大于等于m)
        由于智商有限,小J在配置腐败药水时会花费很大精力,他需要知道自己最少使用多少腐败药水,并在腐败药水数量最小的情况下花费最小的法力值
 
Input
第一行两个正整数n,m表示小G的小弟数量和血量
第二行n个正整数表示小G所有小弟的攻击力
Output
        一行两个整数表示最小的腐败药水数量和在腐败药水最小的情况下法力值花费,如果无论如何都无法战胜,输出一个整数-1
 
Sample Input
Sample Input1:
3 5
1 2 3

Sample Input2:
8 8
10 20 30 40 50 60 70 80

Sample Input3:
8 80
10 20 30 40 50 60 70 80
Sample Output
Sample Output1:
0 5

样例说明
        对2,3小弟使用复用型药水和猎人药水

Sample Output2:
16 23

样例说明
使用16个腐败药水
在第3个腐败药水时拉10,攻击力为1
在第6个腐败药水时拉20,攻击力为2
在第9个腐败药水时拉30,攻击力为3
在第16个腐败药水时拉50,攻击力为2

Sample Output3:
-1
 做法:贪心,显然2>1>3
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #define N 5000007
 6 using namespace std;
 7 int n,m;
 8 int a[N],list[N],tot;
 9 
10 inline int read(){
11     int s=0;
12     char ch=getchar();
13     for(;ch<'0'||ch>'9';ch=getchar());
14     for(;ch>='0'&&ch<='9';s=s*10+ch-'0',ch=getchar());
15     return s;
16 }
17 
18 int main(){
19     freopen("zhanshajihua.in","r",stdin);
20     freopen("zhanshajihua.out","w",stdout);
21     n=read();
22     m=read();
23     for(register int i=1;i<=n;++i) a[i]=read();
24     sort(1+a,1+a+n);
25     if (m==0){
26         printf("0 0");
27         return 0;
28     }
29     register int sum=0,ans=0,attack=0;
30     for(register int i=1;i<=n;){
31         while(a[i]-sum*3>0) ++sum;
32         --sum;
33         int j=i;
34         while(j<=n){
35             if (a[j]-sum*3>3) break;
36             while(a[j]-sum*3==0&&j<=n) j++;
37             if (a[j]-sum*3<3) ++ans,attack+=a[j]-sum*3,list[++tot]=a[j]-sum*3;
38             else ans+=4,attack+=3,list[++tot]=3;
39             ++j;
40         }
41         if (attack>=m) break;
42         i=j; 
43     }
44     ans+=sum;
45     sort(list+1,list+tot+1);
46     while(tot&&list[tot]==3){
47         if (attack-list[tot]>=m){
48             if (list[tot]==3)    attack-=3,ans-=4;
49             else attack-=list[tot],--ans;
50         }
51         if (attack==m) break;
52         tot--;
53     }
54     int j=1;
55     while(j<=tot){
56         if (attack-list[j]>=m){
57             if (list[j]==3)    attack-=3,ans-=4;
58             else attack-=list[j],--ans;
59         }
60         if (attack==m) break;
61         j++;
62     }
63     if (attack>=m) printf("%d %d",sum,ans);
64     else printf("-1");
65 }
View Code

 

转载于:https://www.cnblogs.com/traveller-ly/p/9892465.html

下载前可以先看下教程 https://pan.quark.cn/s/a426667488ae 标题“仿淘宝jquery图片左右切换带数字”揭示了这是一个关于运用jQuery技术完成的图片轮播机制,其特色在于具备淘宝在线平台普遍存在的图片切换表现,并且在个切换环节中会展示当前图片的序列号。 此类功能一般应用于电子商务平台的产品呈现环节,使用户可以便捷地查看多张商品的照片。 说明中的“NULL”表示未提供进一步的信息,但我们可以借助标题来揣摩若干核心的技术要点。 在构建此类功能时,开发者通常会借助以下技术手段:1. **jQuery库**:jQuery是一个应用广泛的JavaScript框架,它简化了HTML文档的遍历、事件管理、动画效果以及Ajax通信。 在此项目中,jQuery将负责处理用户的点击动作(实现左右切换),并且制造流畅的过渡效果。 2. **图片轮播扩展工具**:开发者或许会采用现成的jQuery扩展,例如Slick、Bootstrap Carousel或个性化的轮播函数,以达成图片切换的功能。 这些扩展能够辅助迅速构建功能完善的轮播模块。 3. **即时数字呈现**:展示当前图片的序列号,这需要通过JavaScript或jQuery来追踪并调。 每当图片切换时,相应的数字也会同步更新。 4. **CSS美化**:为了达成淘宝图片切换的视觉效果,可能需要设计特定的CSS样式,涵盖图片的排列方式、过渡效果、点状指示器等。 CSS3的动画和过渡特性(如`transition`和`animation`)在此过程中扮演关键角色。 5. **事件监测**:运用jQuery的`.on()`方法来监测用户的操作,比如点击左右控制按钮或自动按时间间隔切换。 根据用户的交互,触发相应的函数来执行...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值