这题前面两篇题解的代码异常相似!
查看原帖
这题前面两篇题解的代码异常相似!
590609
jiangjiangQwQ楼主2023/6/6 19:46

这是第一篇的。

#include<bits/stdc++.h>
using namespace std;
long long x,y,z,k,ans=1;//记得将 ans 初始化成 1, 否则当 k=0 时 , 就会输出 0, 而不是 1 
int main(){
	cin>>x>>y>>z>>k;
	x--,y--,z--;//x y z 全都减一 , 因为这是方块个数 , 而非缝隙个数 
	if(x>y)swap(x,y);//类似于冒泡排序 
	if(y>z)swap(y,z);
	if(x>y)swap(x,y);
	if(x<k/3)ans*=x+1,k-=x;
	else{
		ans*=k/3+1;
		k-=k/3;
	}
	if(y<k/2)ans*=y+1,k-=y;
	else{
		ans*=k/2+1;
		k-=k/2;
	}
	if(z<k)ans*=z+1;
	else ans*=k+1;
	cout<<ans;
	return 0;
}

第二篇。

#include <bits/stdc++.h>
using namespace std;
long long ans=1;//当k=0时,应该输出1,所以要将ans初始化成1。
long long x,y,z,k;
int main(){
    cin>>x>>y>>z>>k;
    x--;
    y--;
    z--;////x、y、z全都减一,因为它们是方块个数,而不是缝隙个数。
    if(x>y) swap(x,y);
    if(y>z) swap(y,z);
    if(x>y) swap(x,y);//用swap排序
    if(x<k/3){//不能直接除的情况 
        ans*=x+1;
        k-=x;
    }
    else{//可以直接除
        ans*=k/3+1;
        k-=k/3;
    }
    if(y<k/2){
        ans*=y+1;
		k-=y;
    }
    else{
        ans*=k/2+1;
        k-=k/2;
    }
    if(z<k) ans*=z+1;
    else ans*=k+1;
    cout<<ans<<endl;
    return 0;//完美结束
}
2023/6/6 19:46
加载中...