USACO-Prime Cryptarithm
来源:互联网 发布:网络教育英语b统考 编辑:程序博客网 时间:2024/06/08 18:04
http://ace.delos.com/usacoprob2?a=tDp1mPxueqJ&S=crypt1
显而易见,两种解法,一种是直接枚举乘数,共有900*90=81000种可能,然后拆数,判断;另一种是枚举乘数的每一位,边枚举边判断,最坏的情况是9^5=59049种可能,基本上没有超时的可能。。。。
我的是枚举乘数的每一位。
a3 a2 a1 (aa)
* b2 b1 (bb)
-----------------
cc
dd
-----------------
ee
#include <iostream>#include <cstdio>#include <string.h>using namespace std;bool a[10]={0};bool check(int xx,int minn,int maxx){ if (xx<minn || xx>maxx) return false; int temp; while (xx>0) { temp=xx%10; if (!a[temp]) return false; xx=xx/10; } return true;}int main(){ freopen("crypt1.in","r",stdin); freopen("crypt1.out","w",stdout); int n,x; cin>>n; for (int i=1;i<=n;i++) { cin>>x; a[x]=true; } int aa,bb,cc,dd,ee,sum=0; //一层一个剪枝。。。。 for (int a1=1;a1<=9;a1++) if (a[a1]) for (int a2=1;a2<=9;a2++) if (a[a2]) for (int a3=1;a3<=9;a3++) if (a[a3]) { aa=a3*100+a2*10+a1; for (int b1=1;b1<=9;b1++) if (a[b1]) { cc=aa*b1; if (!check(cc,100,1000)) continue; for (int b2=1;b2<=9;b2++) if (a[b2]) { dd=aa*b2; if (!check(dd,100,1000)) continue; bb=b2*10+b1; ee=aa*bb; if (check(ee,1000,10000)) sum++; } } } cout<<sum<<endl; return 0;}
虽说这题不用剪枝也可以,不过为了让程序更快,并且也更符合人的做法。。。
- USACO Prime Cryptarithm Accepted
- Prime Cryptarithm(USACO)
- USACO 1.3-Prime Cryptarithm
- [USACO] Prime Cryptarithm
- USACO 1.3 Prime Cryptarithm
- USACO Prime Cryptarithm
- usaco Prime Cryptarithm
- [USACO]Prime Cryptarithm
- USACO Prime Cryptarithm 杂水题
- USACO:Prime Cryptarithm
- usaco 1.3 Prime Cryptarithm
- USACO Prime Cryptarithm
- USACO-Prime Cryptarithm
- USACO Prime Cryptarithm
- USACO Prime Cryptarithm
- usaco Prime Cryptarithm (暴力)
- USACO 1.3 Prime Cryptarithm
- USACO Prime Cryptarithm
- poj-1904
- poj-1236
- USACO-Barn Repair
- USACO-Milking Cows
- USACO-Calf Flac
- USACO-Prime Cryptarithm
- USACO-Packing Rectangles
- USACO-Arithmetic Progressions
- USACO-Mother's Milk
- USACO-Number Triangles
- USACO-Prime Palindromes
- html文本域字数限制
- USACO-Superprime Rib
- USACO-Checker Challenge