博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 725 Division(暴力模拟)
阅读量:5276 次
发布时间:2019-06-14

本文共 3284 字,大约阅读时间需要 10 分钟。

Division

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

【题目链接】

【题目类型】化简暴力

&题解:

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

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

&代码:

#include 
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
sei, se2;vector
> 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
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 
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)<

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

你可能感兴趣的文章
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
[LeetCode] Merge Intervals
查看>>
【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住
查看>>
Linux编程简介——gcc
查看>>
2019年春季学期第四周作业
查看>>
MVC4.0 利用IActionFilter实现简单的后台操作日志功能
查看>>
rotate the clock
查看>>
bugku 变量
查看>>
数据库01 /Mysql初识以及基本命令操作
查看>>
数据库02 /MySQL基础数据类型以及多表之间建立联系
查看>>
Python并发编程04/多线程
查看>>
CF461B Appleman and Tree
查看>>
CF219D Choosing Capital for Treeland
查看>>
杂七杂八的小笔记本
查看>>
51Nod1353 树
查看>>
CF1215E Marbles
查看>>