1 条题解

  • 0
    @ 2025-8-24 22:25:37

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar MoonCake2011
    有朋自远方来,板砖呼,左手呼完右手呼,呼不S再呼||题目很少,很快就做完了。微笑着做完,才会胜利。||原 Libingyue2011||J:400->360->280 S:265->258

    搬运于2025-08-24 22:25:37,当前版本为作者最后更新于2023-07-16 20:16:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意整理

    nn 个队列,他们要选 kk 个数。选数方案如下。

    从前向后遍历所有队列,如果队列为空,那么将数字的总和 sumsum 加上 50,kk 减少 1。

    否则,如果 sumsum \le 队首,将 sumsum 加上 队首,kk 减少 1。

    不管咋样,最后将队首出队。

    循环以上步骤直到 k=0k=0

    题目之解

    按题意模拟即可,数据范围小,没有太大的技巧。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    queue<int,list<int> >q[20];//把queue的底层容器从deque换成list,更快 
    int n,k,sum;
    int main() {
    	cin>>n>>k;
    	for(int i=1;i<=n;i++){
    		int m;
    		cin>>m;
    		for(int j=1;j<=m;j++){
    			int x;
    			cin>>x;
    			q[i].push(x);
    		}
    	}
    	while(k){//选k道题 
    		for(int i=1;i<=n;i++){
    			if(k==0) break;
    			if(q[i].empty()) sum+=50,k--;
    			else if(q[i].front()<sum) q[i].pop();
    			else sum+=q[i].front(),q[i].pop(),k--;
    		}
    	}
    	cout<<sum;
    	return 0;
    } 
    
    • 1

    信息

    ID
    6137
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者