博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3989 A hard Aoshu Problem
阅读量:7027 次
发布时间:2019-06-28

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

题目连接:http://poj.org/problem?id=3989

题意:给3个字符串,求每个字母匹配一个数字之后成立的等式的个数。S2,S3之间为等号,S1,S2之间可为任意运算符号(+,-,*,/)。

分析:一开是给想复杂了...结果一看范围我崩溃,爆搜秒之。

 

附代码:

View Code
#include
#include
#include
#include
using namespace std; bool v[6]; bool visit[10]; int t[6]; int a[6],b[6],c[6]; int lena,lenb,lenc; int ans; int check() {
int x=0,y=0,z=0,tans=0; if (lena>0 && t[a[0]]==0) return 0; if (lenb>0 && t[b[0]]==0)return 0; if (lenc>0 && t[c[0]]==0) return 0; for (int i=0;i<=lena;i++) x=x*10+t[a[i]]; for (int i=0;i<=lenb;i++) y=y*10+t[b[i]]; for (int i=0;i<=lenc;i++) z=z*10+t[c[i]]; if (x+y==z) tans++; if (x-y==z) tans++; if (x*y==z) tans++; if (y!=0) if (x/y==z && x%y==0) tans++; return tans; } void dfs(int d) {
if (d==5) {
ans+=check(); return; } if (v[d]) for (int i=0;i<=9;i++) {
if (!visit[i]) {
visit[i]=true; t[d]=i; dfs(d+1); visit[i]=false; } } else dfs(d+1); } void init() {
char str[10]; ans=0; memset(v,false,sizeof(b)); memset(visit,false,sizeof(visit)); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",str); for (int i=0;i

 

后记:以后一定要注意先观察数据范围再做思考...

转载于:https://www.cnblogs.com/evan-oi/archive/2012/02/22/2362581.html

你可能感兴趣的文章
Java Collection 简介
查看>>
一个非常不错的背景纹理图的网站
查看>>
WinStore之Application Data
查看>>
word 批量修改表格格式
查看>>
解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
查看>>
memcpy内存拷贝及优化策略图解
查看>>
SQL Server 数据的创建、增长、收缩
查看>>
合并数据
查看>>
RAM,ROM,NAND Flash,NOR Flash(A)
查看>>
安卓启动相关以及架构设计相关
查看>>
centos中添加php扩展pdo_mysql步骤
查看>>
JBOSS 中oracle-ds.xml的配置模板
查看>>
C语言理论知识
查看>>
程序员的工作不能用“生产效率”这个词来衡量
查看>>
模拟电话录音系统2.0
查看>>
Reverse Words in a String
查看>>
程序员的思维修炼
查看>>
c++ about SLL(Static-Link Library) and DLL(Dynamic-Link Library)
查看>>
Linux下程序包管理工具RPM
查看>>
Sql Server系列:索引基础
查看>>