题目链接:点击查看

题目大意:n(n≤4)n(n\le 4)n(n≤4) 张纸牌,每张的范围可以取到 [1,13][1,13][1,13],问能否通过增加运算符和括号,使得运算结果等于 mmm,且:

  1. 运算过程中至少出现一次浮点数
  2. 不允许出现都是整数的解法

题目分析:爆搜即可,搜的方法是有技巧的,比赛的时候不会处理括号的运算优先级遂放弃,还有就是需要读懂题,题目没读懂一开始还以为是题目的问题,简单写一份伪代码

dfs(step,set) {for(int i:set) {for(int j:set) {if(i!=j) {set.del(i),set.del(j);set.add((i+j) or (i-j) or (i*j) or (i/j));dfs(step+1,set);}}}
}

意思就是,每次选择两个数进行运算,将运算结果放入集合中即可,注意在运算的过程中计算一下是否出现了浮点数

代码:

// Problem: 24dian
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11254/F
// Memory Limit: 524288 MB
// Time Limit: 6000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#define lowbit(x) x&-x
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
const double eps=1e-6;
int n,m,ans,as[N][5];
double a[5];
int flag;
int sgn(double x) {if(fabs(x)<=eps) {return 0;} else if(x<0) {return -1;} else {return 1;}
}
bool check(double x) {x-=(int)x;return sgn(x)!=0;
}
void dfs(int step,int state) {if(flag==3) {return;}if(step==4) {if(sgn(a[1]-m)==0) {if(state) {flag|=1;} else {flag|=3;}}return;}double A[5];for(int i=1;i<=4;i++) {A[i]=a[i];}for(int i=1;i<=n-step+1;i++) {for(int j=1;j<=n-step+1;j++) {if(i==j) {continue;}for(int k=1;k<=4;k++) {int nstate=state;if(k==1) {a[i]+=a[j];} else if(k==2) {a[i]-=a[j];} else if(k==3) {a[i]*=a[j];} else if(k==4) {a[i]/=a[j];nstate|=check(a[i]);}swap(a[j],a[n-step+1]);dfs(step+1,nstate);for(int i=1;i<=4;i++) {a[i]=A[i];}}}}
}
void dfs1(int step,int pre) {if(step>4) {flag=0;dfs(1,0);if(flag==1) {ans++;for(int i=1;i<=4;i++) {as[ans][i]=a[i];}}return;}for(int i=pre;i<=13;i++) {a[step]=i;dfs1(step+1,i);}
}
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);read(n),read(m);if(n<=3) {return 0*puts("0");}dfs1(1,1);cout<<ans<<endl;for(int i=1;i<=ans;i++) {for(int j=1;j<=4;j++) {printf("%d ",as[i][j]);}puts("");}return 0;
}

2021牛客多校3 - 24dian(dfs)相关推荐

  1. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  2. 【2021牛客多校2】F-Girlfriend 计算几何

    2021牛客多校2-F F-Girlfriend 题目大意 给出四个点 A , B , C , D A, B, C, D A,B,C,D 另有两点 P 1 , P 2 P_1, P_2 P1​,P2​ ...

  3. 2021牛客多校第五场补题

    B-Boxes 链接:https://ac.nowcoder.com/acm/contest/11256/B 来源:牛客网 题目描述 There're nn_{}n​ boxes in front o ...

  4. K-Stack 2021牛客多校2

    链接:https://ac.nowcoder.com/acm/contest/11253/K 来源:牛客网 题目描述 ZYT had a magic permutation a1,a2,⋯ ,an a ...

  5. 2021牛客多校第八场补题 D-OR

    链接:https://ac.nowcoder.com/acm/contest/11259/D 来源:牛客网 题目描述 There are two sequences of length n−1n-1n ...

  6. 2021牛客多校7 - xay loves trees(dfs序+主席树-标记永久化)

    题目链接:点击查看 题目大意:给出两棵以点 111 为根节点的有根树,现在要求满足条件的最大集合: 在第一棵树中,集合内的任意两个点都必须满足祖先关系,即 uuu 是 vvv 的祖先或 vvv 是 u ...

  7. 2021牛客多校7 F. xay loves trees(主席树+DFS序)

    题意:有两颗n个点的树,找出最大子集,满足如下条件: 该点集在树1上为一条连续的链 该点集在树2上,两两无任何祖先关系 思路: 对于条件2: ​ 点u如果是点v的祖先,那么u的子树一定包含v,即一定包 ...

  8. 【多校训练】2021牛客多校5

    [前言] 很久没有时间整理题解了,补题和打游戏的时间居多(doge) 这场其实主要F出题人数据有锅,花太多时间了(赛后重测是一血),然后后面G想歪了爆搜剪枝没过,I的回滚莫队队友前一天写了结果今天写不 ...

  9. 线段树合并与分裂维护树上最长上升子序列 + 点分治删点 ---- 2021 牛客多校第一场 C - Cut the tree(详解)

    题目大意: 给你一个树,树上每个点都有一个权值valnodeval_{node}valnode​,路径(u,v)(u,v)(u,v) 上所有点按顺序有序序列,令f(u,v)f(u,v)f(u,v)是这 ...

最新文章

  1. 深度学习Anchor Boxes原理与实战技术
  2. 领域驱动设计_软件核心复杂性应对之道
  3. android 7.0 短信监控,Android 7.0 监听网络变化的示例代码
  4. mysql主从复制 跳过表_mysql主从复制-从库跳过异常日志点
  5. pytorch topk()
  6. Java 递归解决 quot;仅仅能两数相乘的计算器计算x^yquot; 问题
  7. AB测试:基础概念、应用场景及入门指南
  8. 雾霾入侵机房会产生哪些危害?该如何防护?
  9. token在浏览器和服务端接收和发送
  10. MySQL:为什么用limit时,offset很大会影响性能
  11. MFC中使用SDL播放音频没有声音的解决方法
  12. mysql 低端_mysql入门
  13. Java线程怎么发送消息_Java客户端Socket如何能在阻塞线程下收到服务端发送来的消息?...
  14. c#图片base64去转义字符_C# imgage图片转base64字符/base64字符串转图片另存成
  15. 视频(avi)转换为图片(Python代码实现)
  16. ORA-00376:file x cannot be read at this time
  17. 2012.4.13总结(一)
  18. 兄dei,来封装一个自定义事件玩玩
  19. MySQL连接查询技术总结
  20. 使用DiskMan(DiskGen)恢复被删除的分区

热门文章

  1. 画风清奇!看看大佬怎么玩Python
  2. java 找出list中相同数据_Java获取List中相同的数据
  3. 搭建K8s集群(二进制方式)-操作系统初始化
  4. Spring Cloud Stream 与 Kafka 整合
  5. Redis数据分布一致性哈希
  6. Redis在生产中不得不重视的几个运维问题
  7. 函数式接口作为方法的参数案例
  8. 数据库-优化-Limit查询的优化
  9. mybatis注解开发使用二级缓存
  10. RestTemplate的三种使用方式