URAL 1698. Square Country 5(记忆化搜索)
2014-12-01 13:31
295 查看
题目链接
题意 : 自守数的定义:如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数。例如5*5=25,则5就是自守数。让你求不超过n位的自守数有多少
思路 : 实际上,自守数还有两个性质:以他为后几位的两个数相乘,乘积的后几位仍是这个自守数。刚好n位的自守数一定是两个,当然1位的时候0和1是没有算进去的,但是题目中1是要加上的,所以从第0位深搜枚举到第n位。还有另一种方法,因为一个数是自守数当且仅当这个数是另一个自守数的后缀,2000位的自守数只有两个,所以存下来直接数也行
View Code
题意 : 自守数的定义:如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数。例如5*5=25,则5就是自守数。让你求不超过n位的自守数有多少
思路 : 实际上,自守数还有两个性质:以他为后几位的两个数相乘,乘积的后几位仍是这个自守数。刚好n位的自守数一定是两个,当然1位的时候0和1是没有算进去的,但是题目中1是要加上的,所以从第0位深搜枚举到第n位。还有另一种方法,因为一个数是自守数当且仅当这个数是另一个自守数的后缀,2000位的自守数只有两个,所以存下来直接数也行
#include <stdio.h> #include <string.h> #include <iostream> using namespace std ; int n,ans ; int a[2100],b[2100] ; bool check(int k) { b[k] = 0 ; for(int i = 0 ; i <= k ; i++) { b[k] += a[i]*a[k-i] ; } if(k) b[k] += b[k-1]/10 ; return b[k] % 10 == a[k] ; } void dfs(int k) { if(k >= n) return ; for(int i = 9 ; i >= 0 ; i--) { a[k] = i ; if(check(k)) { if(a[k]) ans++ ; dfs(k+1) ; } } } int main() { while(~scanf("%d",&n)) { ans = 0 ; dfs(0) ; printf("%d\n",ans) ; } return 0 ; }
View Code
相关文章推荐
- ural 1698. Square Country 5(记忆化搜索)
- Ural 1698. Square Country 5 记忆化搜索
- ural 1073. Square Country
- URAL - 2018 The Debut Album(状态dp 记忆化搜索)
- Ural 1073 Square Country (DP)
- URAL 1501. Sense of Beauty(记忆化搜索 dfs)
- Ural 1073. Square Country
- ural 1073. Square Country
- ural 1073. Square Country(dp)
- URAL 1017 Staircases 记忆化搜索
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
- 【Ural1073】 Square Country——完全背包
- URAL 1073. Square Country
- Ural 1073 Square Country 解题报告
- ural 1073. Square Country
- ural 1073. Square Country
- URAL 1097 Square Country 2 离散化
- ural 1073.Square Country(动态规划)
- URAL 1167. Bicolored Horses(二维dp或者记忆化搜索)
- 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence