10月20日备战Noip2018模拟赛10(B组) T4 Alpha2 虫食算

版权声明:本文为博主原创文章,转载请标明出处 https://blog.csdn.net/MOMING_V/article/details/83241045

10月20日备战Noip2018模拟赛10

T4 Alpha2虫食算

题目描述

粗心的小明把墨水泼在了乘法算式上,由于他实在是太弱了,不知道怎么办,所以请了巨佬PYZ,PYZ看了一眼就说,我不仅可以求出来,我还可以求出很多个解。

下面是一个乘法算式,但是所有的数字都看不见了。

      * * *

   X * *

    -----------

      * * *

    * * *

    -----------

    * * * *

    如果一个“*”可以是任何一个数字,想必这个虫食算有相当多的解;但如果一个“*”只能从给定集合中选取数字,那么这个虫食算有多少个解呢?

输入格式

 第一行有一个正整数N,代表可选数字的个数。

    第二行有Ñ个用空格隔开的数字,这些数字只能是1到9中的一个,并且它们互不相同。这些数字表示一个*可以代表的数字。

输出格式

一行一个整数,总的方案数。

输入样例

5
2 3 4 6 8

输出样例

1

样例解释

下面显示了该虫食算满足样例输入条件的唯一解。

      2 2 2

    x 2 2

     ------

      4 4 4

    4 4 4

  ---------

4 8 8 4

数据范围

50%数据:n <= 5; 100%数据:n <= 9


思路

暴力!

一个个列举所有可能的数,再判断是否合法。

代码

#include <iostream>
#include <cstdio>
 
using namespace std;
 
int n, x, x1, x2, x3, x4, cnt;
bool b[10];
 
bool isAvailable (int x)            //这个函数用来判断所选数的每一个数字是否在输入的数组中
{
	x1 = x % 10 / 1;
	x2 = x % 100 / 10;
	x3 = x % 1000 / 100;
	x4 = x % 10000 / 1000;
	if (x < 100){
		if (!b[x1] || !b[x2]) return false;
	}
	else if (x >= 100 && x < 1000){
		if (!b[x1] || !b[x2] || !b[x3]) return false;
	}
	else{
		if (!b[x1] || !b[x2] || !b[x3] || !b[x4]) return false;
	}
	return true;
}
 
int main ()
{
	//freopen ("alpha2.in", "r", stdin);
	//freopen ("alpha2.out", "w", stdout);
	
	cin >> n;
	for (int i = 1; i <= n; i ++){
		cin >> x;
		b[x] = 1;
	}
	
	cnt = 0;
	for (int i = 100; i < 1000; i ++){
		if (! isAvailable (i)) continue;            //这个数的每一位都合法
		for (int j = 10; j < 100; j ++){
			if (! isAvailable (j)) continue;            //这个数的每一位都合法
			if (i * j >= 10000) continue;            //这个数是四位数
			if (i * (j % 10) >= 1000) continue;            //三位数
			if (i * (j / 10) >= 1000) continue;            //三位数
			if (! isAvailable (i * (j % 10))) continue;
			if (! isAvailable (i * (j / 10))) continue;
			if (! isAvailable (i * j)) continue;
			cnt ++;
		}
	}
	
	cout << cnt;
	
	//fclose (stdin);
	//fclose (stdout); 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/MOMING_V/article/details/83241045
今日推荐