USACO1.3.4牛式
来源:互联网 发布:软件测试的原理 编辑:程序博客网 时间:2024/06/08 14:38
题目
略
思路
这个一看就是9^5的一个暴力枚举嘛 ,但是判断是一如既往的恼火,代码应该可以多用几个函数极大的简化,就是for用递归while再用一个判断
题目不解释样例我很恼火
代码
#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,cnt;int a,b,c,d,e;int x[15];int vis[15];void Init(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x[i]); vis[x[i]]++; }}bool calc(){ int x1=a*100+b*10+c,x2=d*10+e; int y1=e*x1,y2=d*10*x1; int z=y1+y2; y2/=10; if(z>=10000||y2>=10000||y1>=1000) return 0; while(x1) { if(vis[x1%10]==0) return 0; x1/=10; } while(x2) { if(vis[x2%10]==0) return 0; x2/=10; } while(y1) { if(vis[y1%10]==0) return 0; y1/=10; } while(y2) { if(vis[y2%10]==0) return 0; y2/=10; } while(z) { if(vis[z%10]==0) return 0; z/=10; } return 1;}int main(){ //freopen("in.txt","r",stdin); Init(); for(int a1=1;a1<=n;a1++) for(int b1=1;b1<=n;b1++) for(int c1=1;c1<=n;c1++) for(int d1=1;d1<=n;d1++) for(int e1=1;e1<=n;e1++) { a=x[a1]; b=x[b1]; c=x[c1]; d=x[d1]; e=x[e1]; if(calc()) cnt++; } cout<<cnt<<endl; return 0;}
收获
1、注意下标和元素的对应关系,这个不留心的话就容易搞错
2、相同功能的内容尝试写函数,比Ctrlc+Ctrlv肯定是美观很多
3、自己要捋顺各种变量的含义,可以写下来,不耽误时间
4、回溯算法比较耗时间(可能是函数事实证明不是,甚至用了函数快了一点),因为有一个入栈和返回的过程,理论上比直接循环慢一倍,但是(好看啊) 好写呀,还很多重(或者n重)循环你怎么搞?
第四点哪里来的呢?..
番外
像我这种强迫症怎么可能放任代码这么难看呢?哈哈哈。。。
#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,cnt;int a[10];int x[15];int vis[15];void Init(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x[i]); vis[x[i]]++; }}bool jud(int x){ while(x) { if(vis[x%10]==0) return 0; x/=10; } return 1;}bool calc(){ int x1=a[1]*100+a[2]*10+a[3],x2=a[4]*10+a[5]; int y1=a[4]*x1,y2=a[5]*10*x1; int z=y1+y2; y2/=10; if(z>=10000||y2>=10000||y1>=1000) return 0; return jud(x1)&&jud(x2)&&jud(y1)&&jud(y2)&&jud(z);}void run(int i){ if(i>5) { cnt+=calc(); return; } for(int j=1;j<=n;j++) { a[i]=x[j]; run(i+1); }}int main(){ //freopen("in.txt","r",stdin); Init(); run(1); cout<<cnt<<endl; return 0;}
好看多了嘛。
end
阅读全文
1 0
- USACO1.3.4牛式
- USACO1.3.4 Prime Cryptarithm(牛式)
- usaco1.3.4 Wormhole
- [USACO1.3]牛式 Prime Cryptarithm
- 【USACO1.3】牛式 Prime Cryptarithm
- USACO1.3 牛式 Prime Cryptarithm
- USACO1.3牛式 Prime Cryptarithm
- USACO1.3.4 Combination Lock (combo)
- USACO1.3.4 Combination Lock (combo)
- P1211 [USACO1.3]牛式 Prime Cryptarithm
- 【洛谷1211 [USACO1.3]牛式 Prime Cryptarithm】【枚举】
- 【模拟】洛谷 P1211 [USACO1.3]牛式 Prime Cryptarithm
- 这压缩,太强了![USACO1.3]牛式 Prime Cryptarithm
- USACO1.4.4
- USACO1.4.2
- USACO1.3.1
- usaco1.1
- usaco1.1.*
- java-代码块、静态代码块、构造代码块
- CSS label textarea 垂直对齐
- Vue.js:轻量高效的前端组件化方案
- poj 1183 反正切函数的应用
- 关注民生民情——华北水利水电大学“情艺”国情社情调查
- USACO1.3.4牛式
- Ubuntu下Tensorflow cpu版本安装介绍
- POJ
- git--使用github
- Ubuntu16.04下安装mysql各种错误的暴力解决方法...
- dnsmasq配置dns实战
- 多媒体之视频播放、拍照
- Python:两个链表的第一个公共节点
- python之r的作用