1 条题解

  • 0
    @ 2025-8-24 22:52:30

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Milthm
    ?

    搬运于2025-08-24 22:52:30,当前版本为作者最后更新于2023-11-14 21:51:47,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目就是求 2424 点,只是还多了个求不出来的情况。

    这个时候我们应该拿出 P1834 题解,然后你就会发现是两题差不多的(只是不知道为什么难度差这么多)。

    方法我在这篇题解里也写了,就是全排列枚举,然后暴力枚举符号。

    然后取最大值的时候记得判断是否大于 2424

    AC code

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[5],f,ans; 
    int calc(int x,int y,int op){
        if(op==0)return x+y;
        if(op==1)return x-y;
        if(op==2)return x*y;
        if(op==3&&y!=0&&x%y==0)return x/y;
        f=1;return 0;
    }
    int main(){
    	cin>>n;
    	while(n--){
    		ans=0;
    		for(int i=1;i<=4;++i)cin>>a[i];
    		do{
    			for(int i=0;i<4;++i){
    				for(int j=0;j<4;++j){
    					for(int k=0;k<4;++k){
    						f=0;int x=calc(calc(calc(a[1],a[2],i),a[3],j),a[4],k);
    						if(f==0&&x<=24)ans=max(ans,x);
    						f=0;x=calc(calc(a[1],calc(a[2],a[3],j),i),a[4],k);
    						if(f==0&&x<=24)ans=max(ans,x);
    						f=0;x=calc(a[1],calc(a[2],calc(a[3],a[4],k),j),i);
    						if(f==0&&x<=24)ans=max(ans,x);
    						f=0;x=calc(calc(a[1],a[2],i),calc(a[3],a[4],k),j);
    						if(f==0&&x<=24)ans=max(ans,x);
    						f=0;x=calc(a[1],calc(calc(a[2],a[3],j),a[4],k),i);
    						if(f==0&&x<=24)ans=max(ans,x);
    					}
    				}
    			}
    		}while(next_permutation(a+1,a+5));
    		cout<<ans<<'\n';
    	} 
    	return 0;
    }
    
    
    • 1

    信息

    ID
    8768
    时间
    3000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者