选拔六

1.B - Jiubei and Overwatch(注意是范围伤害,只需要找出血量最大值就可以了)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[10000];
 4 int main()
 5 {
 6     int m;
 7     cin>>m;
 8     while(m--)
 9     {
10         int n,k,x,y;
11         cin>>n>>k>>x>>y;
12         int sum=0;
13         for(int i=0;i<n;i++)cin>>a[i],sum=max(sum,a[i]);
14         if(sum<=k*x)cout<<(sum-1)/x+1<<endl;
15         else cout<<k+(sum-k*x-1)/y+1<<endl;
16     }
17     return 0;
18 }

2.F - Sum of Numerators(找规律,b每增加一总和从1到a的sum就会减去一次从1到a=a/2的sum)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[10000];
 4 int main()
 5 {
 6     int m;
 7     cin>>m;
 8     while(m--)
 9     {
10         long long a,b;
11         cin>>a>>b;
12         long long sum=a*(a+1)/2;
13         while(a>0&&b>0)
14         {
15             a/=2;
16             sum-=a*(a+1)/2;
17             b--;
18         }
19         cout<<sum<<endl;
20     }
21     return 0;
22 }

3.L - Monster Tower(使用优先队列,由于是打一层怪楼就往下掉一层,所以存优先队列找血量最小的怪,叠加血量后pop掉打过的怪,并将能打到的怪存入队列中,如果优先队列中第一个怪都打不过则此答案false)

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 int a[1000000];
 5 int n,k;
 6 bool solve(ll x)
 7 {
 8     priority_queue<ll,vector<ll>,greater<ll>>p;
 9     for(int i=0;i<k;i++)
10         p.push(a[i]);
11     ll b=x;
12     for(int i=k;i<n;i++)
13     {
14         ll t=p.top();
15         p.pop();
16         if(b<t)return false;
17         b+=t;
18         p.push(a[i]);
19     }
20     for(int i=k-1;i>=0;i--)
21     {
22         ll t=p.top();
23         p.pop();
24         if(b<t)return false;
25         b+=t;
26     }
27     return true;
28 }
29 signed main() {
30     ios::sync_with_stdio(0);
31     cin.tie(0) , cout.tie(0);
32     int T ;
33     cin >> T ;
34     while(T--)
35     {
36         cin>>n>>k;
37         for(int i=0;i<n;i++)cin>>a[i];
38         ll l=1,r=1e9;
39         ll Mid;
40         while(l<=r)
41         {
42             Mid=l+r>>1;
43             if(solve(Mid))
44             {
45                 r=Mid-1;
46             }
47             else l=Mid+1;
48         }
49         cout<<l<<endl;
50     }
51     return 0;
52 }

 

posted @ 2024-02-25 12:19  伊芙加登  阅读(4)  评论(0编辑  收藏  举报