1 条题解

  • 0
    @ 2026-6-17 15:03:11

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

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int N = 1e5+5;
    void slove() {
    	ll n1, n2, n3;
    	scanf("%lld%lld%lld", &n1, &n2, &n3);
    	ll ans = 0;
    	// 334的匹配模式
    	ll s = min(n2 / 2, n3);
    	ans += s;
    	n2 = n2 - s * 2;
    	n3 -= s;
    	//2233匹配
    	s = min(n2 / 2, n1 / 2);
    	ans += s;
    	n2 -= s * 2;
    	n1 -= s * 2;
    	//442的匹配
    	s = min(n1, n3 / 2);
    	ans += s;
    	n3 = n3 - s * 2;
    	n1 = n1 - s;
    	//2224匹配
    	if (n3 > 0)
    		if (n1 >= 3) {
    			ans++;
    			n1 -= 3;
    		}
    	//22222匹配
    	ans += n1 / 5;
    	printf("%lld\n", ans);
    }
    
    int main() {
    	freopen("ten.in", "r", stdin);
    	freopen("ten.out", "w", stdout);
    	int _ = 1;
    	cin >> _;
    	while (_--) {
    		slove();
    	}
    	return 0;
    }
    
    

    小结

    • 先 334:优先用 3 搭配 4,不耗 2,节省万能资源 2。
    • 再 2233:用尽剩余的 3(当 4 不足时,3 只能这样用)。
    • 再 244:只用 1 根 2/块,把 4 尽量两两用掉,继续节省 2。
    • 再 2224:若只剩 1 根 4,用 3 根 2 把它消掉(至多一次)。
    • 最后 22222:把 2 全部打包。
    • 1

    信息

    ID
    179
    时间
    2000ms
    内存
    1024MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者