首页 > 其他分享 >2024SMUSpring天梯4补题

2024SMUSpring天梯4补题

时间:2024-04-15 14:34:15浏览次数:35  
标签:return process 括号 vct 补题 天梯 2024SMUSpring card op

L2-3:用扑克牌计算24点

题意:

思路:全排列枚举 or dfs得到全排列。枚举方式和"飞机降落"一样。题目类似"电阻组合"那题。要注意的是要枚举3种东西:数字的全排列,符号的全排列,以及!括号的情况!。一开始括号只是考虑到样例那种情况,wa两个点。括号会影响除法的计算。

总的来说:枚举出全排列,符号的情况及组合。进行check即可,check中考虑这种组合情况的不同括号的计算结果。

ps:一定一定要封装成函数,好写很多。

double card[5],vis1[5],vis2[5];
vector<int> vct;
vector<char> opp;
bool res=false;
char op[4]={'+','-','*','/'};
double process(double a,double b,char op){
    if(op=='+') return a+b;
    if(op=='-') return a-b;
    if(op=='*') return a*b;
    if(op=='/'&&b==0) return -99999999999999999;              //实际上b不可能为0,因为b是card中的数
    if(op=='/'&&b!=0) return a/b;
}
void check(){           //括号的情况有五种
    int a=vct[0],b=vct[1],c=vct[2],d=vct[3];
    char op1=opp[0],op2=opp[1],op3=opp[2];
    if( process(process(process(a,b,op1),c,op2),d,op3)==24 ){               //((a^b)^c)^d
        cout<<"(("<<a<<op1<<b<<")"<<op2<<c<<")"<<op3<<d;
        res=true;
    }
    else if( process(process(a,b,op1),process(c,d,op3),op2)==24 ){            //(a^b)^(c^d)
        cout<<"("<<a<<op1<<b<<")"<<op2<<"("<<c<<op3<<d<<")";
        res=true;
    }
    else if( process(process(a,process(b,c,op2),op1),d,op3)==24 ){              //a^(b^c)^d
        cout<<a<<op1<<"("<<b<<op2<<c<<")"<<op3<<d;
        res=true;
    }
    else if( process(a,process(process(b,c,op2),d,op3),op1)==24 ){               //a^((b^c)^d)
        cout<<a<<op1<<"(("<<b<<op2<<c<<")"<<op3<<d<<")";
        res=true;
    }
    else if( process(a,process(b,process(c,d,op3),op2),op1)==24 ){               //a^(b^(c^d))
        cout<<a<<op1<<"("<<b<<op2<<"("<<c<<op3<<d<<"))";
        res=true;
    }
}
void dfs2(){            //符号的全排列
    if(opp.size()==3){
        check();
        return;
    }
    for(int i=0;i<4;i++){       //i<4
        if(vis2[i]) continue;
        vis2[i]=1;
        opp.emplace_back(op[i]);
        dfs2();
        vis2[i]=0;
        opp.pop_back();
        if(res) return;
    }
}
void dfs1(){
    if(vct.size()==4){          //卡牌的全排列情况之一
        dfs2();
        return;
    }
    for(int i=1;i<=4;i++){       //枚举卡牌的全排列的情况
        if(vis1[i]) continue;
        vis1[i]=1;
        vct.emplace_back(card[i]);
        dfs1();
        vis1[i]=0;
        vct.pop_back();
        if(res) return;
    }
}
void solve(){           //L2-3          就是电阻题//枚举数字组合--枚举字符组合--
    // 枚举括号组合--除法的问题,顺序对除法有影响...
    cin>>card[1]>>card[2]>>card[3]>>card[4];
    dfs1();
    if(res==false) cout<<"-1";
}

 

标签:return,process,括号,vct,补题,天梯,2024SMUSpring,card,op
From: https://www.cnblogs.com/ouhq/p/18135889

相关文章

  • 天梯赛真题补题单(L1-6 ~ L1-8)
    L1-6整除光棍(思维题)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=100200,M=2020;constdoublePI=3.141592;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);LLT=1;......
  • 天梯赛真题补题单(L1-1 ~ L1-5)
    L1-1寻找250#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLN=100200,M=2020;constdoublePI=3.141592;intmain(){//cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);LLT=1;......
  • SMU 2024 spring 天梯赛4
    SMU2024spring天梯赛47-1心理阴影面积-SMU2024spring天梯赛4(pintia.cn)由\(d=\frac{Ax+By+c}{\sqrt{A^2+B^2}}\)再乘以\(100\sqrt2\times\frac{1}{2}\)可得\(|x-y|\times50\);#include<bits/stdc++.h>usingnamespacestd;usingi64=longl......
  • 天梯赛-练习集-L2-002 链表去重(25分)
    L2-002链表去重代码长度限制:16KB时间限制:400ms内存限制:64MB题目描述给定一个带整数键值的链表L,你需要把其中绝对值重复的键值结点删掉。即对每个键值K,只有第一个绝对值等于K的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定L为21→-15→-15......
  • 天梯赛-练习集 -L2-001 紧急救援, 一个不是很正常的过题方法
    L2-001紧急救援代码长度限制:16KB时间限制:200ms内存限制:64MB题目描述作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他......
  • 2024SMU蓝桥训练2补题
    C-密文搜索思路:不难。voidsolve(){//C--密文搜索可以不是字符串哈希--因为只需要知道相同长度字符串对字母出现情况,可以对字符串进行!!!排序!!!stringstr;cin>>str;intn,ans=0;cin>>n;unordered_map<string,int>mp;for(inti=1;i<=n;i++){......
  • 2024.4.9 图论补题
    P3225[HNOI2012]矿场搭建如果没有割点,至少需要建立两个出口如果只有一个割点,只需要设立一个出口如果有两个及以上个割点,则无需建立,可以直接到达其他联通块#include<cmath>#include<queue>#include<cstdio>#include<vector>#include<cstdlib>#include<cstring>#include......
  • 2024.4.8 数据结构课件补题
    [AGC055B]ABCSupremacy令ABC分别为1,2,3,然后令\(s_i=(s_i-i)\textmod3\)且结果大于0。然后可以发现三种组合均为连贯的三个相同数。且可以自由移动。可以选择每遇到三个相同数就删掉,或者不断加入栈,如果栈顶三个数相同全部弹出。再比较剩下的数即可。#include<bits......
  • 2024/4/8 课件补题
    2024/4/8课件补题[AGC055B]ABCSupremacy思维题。发现所有的\(ABC\),\(BCA\),\(CAB\)都可以任意向左向右移动,所以只需要把所有的\(ABC\)挪到字符串结尾即可,具体操作时可以删掉再比对\(s\)和\(t\)是否相同。#include<bits/stdc++.h>usingnamespacestd;#defineld......
  • 2024年最新显卡天梯图来了!三种性能测试显卡排行榜
    2024年最新显卡天梯图来了!本次带来的显卡性能测试主要利用TimeSpy、TimeSpyExtreme、PortRoyal三种不同测试方法来展现最新显卡性能情况,有了显卡天梯图我们可以实时了解显卡市场,选择适合自己需求的显卡,对于不懂显卡性能的用户显卡天梯图无疑是最好入门和理解的。2024年最新......