Division

紫书入门级别的暴力,可我还是写了好长时间 = =

【题目链接】uva 725

【题目类型】化简暴力

&题解:
首先要看懂题意,他的意思也就是0~9都只出现一遍,在这2个5位数中。
接着,你要知道:枚举一个5位数就够了,不用2个5位数都枚举,因为你可以通过n知道第2个5位数。
最后set维护出现的次数,ok判断是否可行,pri输出。

【时间复杂度】O(1e5)

&代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
#define cle(a,val) memset(a,(val),sizeof(a))
#define SI(N) scanf("%d",&(N))
#define SII(N,M) scanf("%d %d",&(N),&(M))
#define SIII(N,M,K) scanf("%d %d %d",&(N),&(M),&(K))
#define rep(i,b) for(int i=0;i<(b);i++)
#define rez(i,a,b) for(int i=(a);i<=(b);i++)
#define red(i,a,b) for(int i=(a);i>=(b);i--)
const ll LINF = 0x3f3f3f3f3f3f3f3f;
#define PU(x) puts(#x);
int n;
set<int> sei, se2;
vector<pair<int, int> > vep;
bool ok(int d) {se2 = sei;int t = d / n;if (t * n != d) {return false;}int u = 0;while (t) {u++;sei.insert(t % 10);t /= 10;}if (u > 5) {return false;}if (sei.size() == 9 && !sei.count(0) && u == 4) {return true;}if (sei.size() == 10) {return true;}return false;
}
void pri() {if (vep.empty()) {printf("There are no solutions for %d.\n", n);return;}int t = vep.size();rep(i, t)printf("%05d / %05d = %d\n", vep[i].first, vep[i].second, n);
}
void Solve() {int uu = 0;while (~SI(n), n) {if (uu) PU()uu = 1;sei.clear() ;vep.clear();rez(i1, 0, 9) {sei.insert(i1);rez(i2, 0, 9) {if (sei.count(i2)) continue;sei.insert(i2);rez(i3, 0, 9) {if (sei.count(i3)) continue;sei.insert(i3);rez(i4, 0, 9) {if (sei.count(i4)) continue;sei.insert(i4);rez(i5, 0, 9) {if (sei.count(i5)) continue;sei.insert(i5);int d = i1 * 1e4 + i2 * 1e3 + i3 * 1e2 + i4 * 1e1 + i5;if (ok(d)) {pair<int, int> p;p.first = d;p.second = d / n;vep.push_back(p);}sei = se2;sei.erase(i5);}sei.erase(i4);}sei.erase(i3);}sei.erase(i2);}sei.erase(i1);}pri();}
}
int main() {Solve();return 0;
}

上面是按位搜索的暴力,代码较长,下面是直接枚举的暴力,枚举枚举范围1234~98765,之后再判断,这样写代码就较短了。我枚举的是第一个5位数,当然,也可以枚举第二个,你自己可以试下。

&代码2:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
#define cle(a,val) memset(a,(val),sizeof(a))
#define SI(N) scanf("%d",&(N))
#define SII(N,M) scanf("%d %d",&(N),&(M))
#define SIII(N,M,K) scanf("%d %d %d",&(N),&(M),&(K))
#define rep(i,b) for(ll i=0;i<(b);i++)
#define rez(i,a,b) for(ll i=(a);i<=(b);i++)
#define red(i,a,b) for(ll i=(a);i>=(b);i--)
const ll LINF = 0x3f3f3f3f3f3f3f3f;
#define PU(x) puts(#x);
#define PI(A) cout<<(A)<<endl;
#define DG(x) cout<<#x<<"="<<(x)<<endl;
#define DGG(x,y) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<endl;
#define DGGG(x,y,z) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<" "<<#z<<"="<<(z)<<endl;
#define PIar(a,n) rep(i,n)cout<<a[i]<<" ";cout<<endl;
#define PIarr(a,n,m) rep(aa,n){rep(bb, m)cout<<a[aa][bb]<<" ";cout<<endl;}
const double EPS = 1e-9 ;
/*     C o d i n g  S p a c e     */
const int MAXN = 1000 + 5 ;
int n;
bool used[10];
bool ok(int x, int y) {if (y*n!=x) return false;cle(used, 0);//这是1e4 不是1e5if (x < 10000) used[0] = 1;if (y < 10000) used[0] = 1;int u1 = 0, u2 = 0;while (x) {used[x % 10] = 1;x /= 10;u1++;}while (y) {used[y % 10] = 1;y /= 10;u2++;}int c = 0;if (u1 < 6 && u2 < 6)rep(i, 10) if (used[i]) c++;return (c == 10);
}
void Solve() {int kg = 0;while (~SI(n), n) {if (kg)puts("");kg = -1;for (int i = 1234; i <= 98765; i++)if (ok(i, i / n)) {printf("%05d / %05d = %d\n", i, i / n, n);kg = 1;}if (kg == -1) printf("There are no solutions for %d.\n", n);}
}
int main() {Solve();return 0;
}

转载于:https://www.cnblogs.com/s1124yy/p/5901425.html

uva 725 Division(暴力模拟)相关推荐

  1. 暴力枚举 UVA 725 Division

    题目传送门 1 /* 2 暴力:对于每一个数都判断,是否数字全都使用过一遍 3 */ 4 #include <cstdio> 5 #include <iostream> 6 # ...

  2. UVA 725 Division(除法)

    输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2n79. 题解:暴力破解枚举fghij. #include<iostream ...

  3. 【2018.3.24】模拟赛之四-ssl2548 旋转【暴力模拟】

    正题 大意 给出一块黑块和白块组成的版,将其旋转90°后和之前的黑块叠加,求最初始和每次旋转后的黑块数. 解题思路 暴力模拟不解释 代码 #include<cstdio> #include ...

  4. HLJUOJ1117(暴力模拟)

    八数码 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 109  Solved: 19 [Submit][Status][Web Board] Desc ...

  5. 牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟

    牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟 题意 思路 Code 传送门: https://ac.nowcoder.com/acm/contest/16081/E 题意 登山顺 ...

  6. 【暴力+模拟】HDU-1346 Coconuts, Revisited

    注解 1.暴力模拟,从题目给定的数目减一开始枚举人数,直到人数只有1人为止.最先找到的满足题目要求的人数,就是答案. 代码 #include <iostream>using namespa ...

  7. 365. 水壶问题-暴力模拟倒水过程-递归法

    365. 水壶问题-暴力模拟倒水过程-递归法 有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 targetCa ...

  8. 22行代码AC——例题7-1除法(Division UVa 725)——解题报告

    励志用尽量少的代码做高效的表达 题目(提交)链接→UVa-725 题目大意: 0-9不重复的组成两个5位数,如果数A/数B=n,则为可行解. 思路分析: 本题实质是通过巧妙分析的暴力求解法. 下等解法 ...

  9. UVA 725 Divisions 除法(暴力,0 ms)

    本题较为简单,将不会编写算法分析说明与代码编写指导. AC 代码(0 ms): #include<cstdio> #include<cstdlib> #include<c ...

最新文章

  1. 物理机linux无法上网,物理机不能访问虚拟机VMNet8中的Linux
  2. System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别
  3. oracle命令格式,OraCmD(Oracle命令行工具) V3.1 官方版
  4. Hbase的基本认识
  5. Silverlight实例教程 - Validation验证系列汇总
  6. linux远程登录 密钥,使用密钥认证机制远程登录Linux
  7. HTML5 address元素
  8. php返回ajax必须是数组,ajax返回数组,页面接收不到数据
  9. 微型计算机及接口技术考试卷,微机原理与接口技术考试试题及答案 2
  10. 共用软件现漏洞未修复,一年来美国数十个政府网站在推送色情广告
  11. VS Code设置缩进两个字符
  12. python使用gmail发送邮件
  13. Mysql B+树索引的使用
  14. C# Bitmap引用System.Drawing报错 “...不存在类型命名空间名...”的修复
  15. 基于labview开发平台的声音信号采集及处理系统设计(任务书+lunwen+翻译及原文+vi源文件+查重报告)
  16. 你知道为什么zip始终不兼容rar吗?
  17. Node-RED使用指南:22:定制化Node的使用方法
  18. Jzoj5450【NOIP2017提高A组冲刺11.4】Neutral
  19. 项目管理中的成本计算
  20. 5G术语(一)-NR、NSA/SA

热门文章

  1. Dalvik Virtual Execution with SmaliVM
  2. Android Context getSystemService分析
  3. Xposed源码剖析——Xposed初始化
  4. mysql查看系统运行日志文件_mysql自身运行日志文件详解
  5. JZOJ 3129. 【WinterCamp 2013】数三角形
  6. git本地ben远程分支_Git本地分支和远程分支关联
  7. python编程环境要求_python公开课|我们需要优秀Python编程环境的要求居然是这些...
  8. 查询 oracle_关于oracle和mysql数据库的查询问题
  9. 安卓 camera 调用流程_[Camera]Camera1 open、preview、take picture流程分析(3)
  10. 文本分类入门(九)文本分类问题的分类