acdream 小晴天老师系列——竖式乘法(简单穷举)
小晴天老师系列——竖式乘法
Problem Description
小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本《AC is not a dream》杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为0,但是有一些数字被隐藏掉了,然后让你根据没有隐藏的数字填出隐藏的数字。
如下图:

然后小晴天二话不说,三下五除二就写出了答案:

然后小晴天就觉得这样的题目太简单了,于是问你是否有办法来求出一道题目有多少种不同的答案呢?(只要有一个方框有不同的数字即为不同的答案)
Input
多组数据,首先是一个整数t(t<=20),表示数据组数。
对于每组数据,用5行表示一个竖式,每行均为一个字符串,仅含有星号(*)与数字('0'~'9')组成,其中星号表示空白
其中第一行为长度为3的字符串。
第二行为长度为2的字符串。
第三行为长度为4的字符串。
第四行为长度为3的字符串。
第五行为长度为5的字符串。
Output
对于每组数据,输出一个整数x,表示符合乘法竖式法则的填法的种类。
Sample Input
2
***
**
3384
846
*****
4**
**
3384
846
*****
Sample Output
2
1
Hint
样例1,除了题目中的那种情况,还有这种

而样例2,因为第一个数的百位被固定为4,故只有一种填法。
思路:第一行和第二行两个数都是比较小的,直接穷举这2个数,再将17格子的所有可能行的结果保存。根据输入17个就直接搜可行的结果匹配。注意5个数字的开头都不能为0。
/*
* this code is made by xcw0754
* Problem: 1704
* Verdict: Accepted
* Submission Date: 2015-07-16 10:18:37
* Time: 4MS
* Memory: 36836KB
*/
//#pragma comment(linker,"/STACK:102400000,102400000")
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=;
int up;
int s[N][]; void pre_cal()
{
up=;
for(int i=; i<; i++)
{
for(int j=; j<; j++)
{
s[up][]=i/; //不能为0
s[up][]=i/%;
s[up][]=i%; s[up][]=j/; //不能为0
s[up][]=j%; int tmp=i*(j%); //第3行
s[up][]=tmp/; //不能为0
if(!s[up][] || s[up][]>) continue;
s[up][]=tmp/%;
s[up][]=tmp/%;
s[up][]=tmp%; tmp=i*(j/); //第4行
s[up][]=tmp/; //不能为0
if(!s[up][]|| s[up][]>) continue;
s[up][]=tmp/%;
s[up][]=tmp%; tmp=i*j; //第5行
s[up][]=tmp/;//不能为0
if(!s[up][]) continue;
s[up][]=tmp/%;
s[up][]=tmp/%;
s[up][]=tmp/%;
s[up][]=tmp%;
up++;
}
} } int now[];
vector<int> alk;
char c[]; void get_input()
{
memset(now,,sizeof(now));
alk.clear(); scanf("%s",c);
scanf("%s",c+);
scanf("%s",c+);
scanf("%s",c+);
scanf("%s",c+); for(int i=; i<; i++)
if(isdigit(c[i]))
{
now[i]=c[i]-'';
alk.push_back(i);
}
} int cal()
{
int ans=;
for(int i=; i<up; i++)
{
int j;
for(j=; j<alk.size(); j++) //这几个都要匹配
{
int k=alk[j];
if(now[k]!=s[i][k]) break;
}
if(j==alk.size())
ans++;
}
return ans;
} int main()
{
//freopen("input.txt", "r", stdin);
pre_cal();
int t;
scanf("%d",&t);
while(t--)
{
get_input();
printf("%d\n",cal());
}
return ;
}
AC代码
acdream 小晴天老师系列——竖式乘法(简单穷举)的更多相关文章
- C -小晴天老师系列——竖式乘法
C - 小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...
- [ACdream]小晴天老师系列——竖式乘
题目链接:http://acdream.info/contest?cid=1269#problem-C Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学 ...
- acdream 小晴天老师系列——苹果大丰收(DP)
小晴天老师系列——苹果大丰收 Problem Description 小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的. 为了保存苹果,小晴天买 ...
- acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)
小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- acdream 小晴天老师系列——我有一个数列! (ST算法)
小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)S ...
- G - 小晴天老师系列——可恶的墨水瓶
G - 小晴天老师系列——可恶的墨水瓶 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- E - 小晴天老师系列——我有一个数列!
E - 小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/O ...
- D - 小晴天老师系列——晴天的后花园
D - 小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Oth ...
- F - 小晴天老师系列——苹果大丰收
F - 小晴天老师系列——苹果大丰收 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
随机推荐
- vector 内部方法大全 学习(初学者的参考资料)
1 vector构造函数:也就是如何对一个vector对象进行初始化 ////////////////////////////代码//////////////////////////////// ...
- 1 server - n clients 模型实现(select)
拓扑结构: 各个客户端创建读写管道,通过“上下线信息管道”向服务器发送上下线信息和读写管道名称.服务器接受信息,修改链表(存储客户端信息).客户端.服务器打开读写管道,服务器通过“W”管道接收从客户端 ...
- Oracle中对象权限与系统权限revoke
实验: 1.以sys登陆,创建用户test1, test2: 2.授予test1系统权限(带admin option)-connect,授予test1对象权限(带grant option)-selec ...
- Java中的break与continue区别
break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...
- 数据生成器Bogus的使用以及基于声明的扩展
引言 最近在整理代码,发现以前写的一个数据填充器写了一半没实现,而偏偏这段时间就要用到类似的功能,所以正好实现下. 目标 这个工具的目标是能够在项目初期快速搭建一个"数据提供器", ...
- uc/os 任务删除
问题描述: uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注: 如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...
- jQuery,javascript获得网页的高度和宽度
网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.body.offsetWi ...
- python繁体中文到简体中文的转换
处理中文字符串遇到了繁体和简体中文的转换,python版: 1.下载zh_wiki.py及langconv zh_wiki.py:https://github.com/skydark/nstool ...
- java核心技术记录
Java是一种强类型的语言,这意味着必须为每一个变量声明一种类型.在java中,一共有8种基本类型,其中4种整型.2种浮点型.1种用于表示Unicode编码的字符单元的字符类型char和一种用于表示真 ...
- Linux如何在虚拟机中挂载iso yum源
首先,将作为源的iso的挂载到系统上. 代码如下: mount -o loop /dev/cdrom /mnt/iso/ 或者 mount -o loop /xxx/xxx.iso /mnt/iso/ ...