ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

A - Make 10

2021-09-20 10:04:35  阅读:134  来源: 互联网

标签:10 ll sticks Make mn3 each ans mn2


https://atcoder.jp/contests/arc126/tasks/arc126_a

题面
We have N2 sticks of length 2 each, N3 sticks of length 3 each, and N
4 sticks of length 4 each. You can do the following operation any number of times.Choose two sticks.
Let x and y be the lengths of these sticks. Bond them to form a stick of length x+y.
Find the maximum number of sticks that can be made whose lengths are exactly 10.
Given T test cases, solve each of them.
在这里插入图片描述

input

5
3 4 1
7 0 0
0 0 7
0 0 0
1000000000000000 1000000000000000 1000000000000000

output

2
1
0
0
900000000000000

长度分别为2,3,4的木条,通过粘连操作将其拼成长度为10的木条,在最后输出最大的个数。
先给小木条长度设置优先级,长度为3的应该最先来使用,先用两个3去消耗一个4.
再用两个3消耗两个2.
然后是两个4消耗一个2
现在若长度为4的还有有一个则将其用2消耗掉。
最后加上长为2的个数除以五。

#include <stdio.h>
#include<iostream>
using namespace std;
#define ll long long
void solve()
{
    ll a, b, c;
    cin>>a>>b>>c;
    ll ans = 0;
    ll mn = min(b/2, c);//两个3去消耗一个4
    ans += mn, b -= mn*2, c -= mn;
    
    ll mn3 = min(b/2, a/2);
    ans += mn3, b -= mn3*2, a -= mn3*2;//两个3去消耗两个2
    
    ll mn2 = min(c/2, a);
    ans += mn2, c -= mn2*2, a -= mn2;//两个4消耗一个2
    if (c>0)
    {
        if (a >= 3)
        {
            a -= 3, ans++, c = 0;
        }
    }
    ans += a/5;
    cout << ans << '\n';
}
int main()
{
    int t = 1;
    cin >> t;
    while (t--) 
        solve();
}

标签:10,ll,sticks,Make,mn3,each,ans,mn2
来源: https://blog.csdn.net/weixin_46574282/article/details/120388156

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有