G题求解

我的思路是创建一个map,用while循环逐个将第a[i]个数导入map,导入的同时用m减去a[i],如果m<=0就找到map最大的那个数使用神力,当神力次数k为0,并且m<=0时就退出while循环

感觉思路没问题啊,就只能过64%,求大佬解惑

下面是我的代码:

#include <bits/stdc++.h>

using namespace std;

#define ll long long

ll n,m,k,sum,cnt,a[200005],imx,nn;

void yezid() {

cin>>n>>m>>k;

cnt=0;//cnt为可以畅游的国家数

map<ll,ll>mp;

for(ll i=0; i<n; i++) {

cin>>a[i];

}

imx=0;//imx为下一个将要导入的下标

while(1) {

if ((k==0 and m<=a[imx]) or imx==n or cnt==n) break;

mp[a[imx]]++;//导入map

m-=a[imx];

while(k>0) {//一直使用神力直到m>0或者次数用尽

if (m>0) break;

auto it=mp.end();

it--;

m+=it->first;

it->second--;

k--;

}

if (m>0) {//m成功>0就是畅游成功

cnt++;

imx++;

} else break;

}

cout<<cnt<<'\n';

}

signed main() {

ios::sync_with_stdio(0);

cin.tie(0);

cout.tie(0);

yezid();

return 0;

}

全部评论

相关推荐

Wy_m:只要不是能叫的上名的公司 去实习没有任何意义 不如好好沉淀自己
点赞 评论 收藏
分享
数开小菜鸡_暂退沉淀版:大二第三段,还是字节,这下真得点点举办了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务