UVA 10825 Anagram and Multiplication(暴力枚举)
来源:互联网 发布:淘宝zara原单是真的吗 编辑:程序博客网 时间:2024/06/09 09:01
这题用next_permutation也能过,之前子集写枚举全排列,然后用暴力方法配对写崩了= =。
需要注意的只有一点,因为枚举的是最优一位,所以最后一位是固定的,枚举全排列也是枚举第前m-1位的全排列。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10;const int maxm=400+10;int m,n;int a[maxm],v[maxm],ans[maxn];bool check(int x,int *b){ memset(a,0,sizeof(a)); int tmp=0; for(int i=m-1;i>=0;i--) { tmp=(tmp+b[i]*x); int k=tmp%n; a[k]++; tmp/=n; if(a[k]>v[k]) return false; } return tmp==0;}bool judge(int x){ memset(v,0,sizeof(v)); int tmp=0; for(int i=0;i<m;i++){ tmp=(tmp+x)%n; ans[i]=tmp; v[tmp]++; } swap(ans[0],ans[m-1]); sort(ans,ans+m-1); do{ bool ok=true; if(ans[0]==0) continue; for(int i=2;i<=m;i++){ if(check(i,ans)) continue; ok=false;break; } if(ok) return true; }while(next_permutation(ans,ans+m-1)); return false;}int main(){ while(scanf("%d%d",&m,&n)&&(m+n)) { bool ok=false; for(int i=1;i<n;i++) { if(judge(i)) {ok=true;break;} } if(ok) for(int i=0;i<m;i++) printf("%s%d",(i==0)?"":" ",ans[i]); else printf("Not found."); printf("\n"); } return 0;}
0 0
- UVA 10825 Anagram and Multiplication(暴力枚举)
- uva 10825 - Anagram and Multiplication(暴力)
- UVA - 10825 Anagram and Multiplication 暴力
- UVA - 10825 Anagram and Multiplication 暴力
- UVA 10825 Anagram and Multiplication 暴力 -
- UVA - 10825 Anagram and Multiplication
- UVa 10825 Anagram and Multiplication
- Uva 10825 Anagram and Multiplication dfs 爆搜排列
- Anagram and Multiplication
- uva 565(暴力+枚举)
- Uva 1595 暴力枚举
- UVA 455 暴力枚举
- UVA 10729 - Treequivalence(暴力枚举)
- UVA -birthday cake(暴力枚举)
- UVA 1262 Password 暴力枚举
- uva - 10730 - Antiarithmetic?(暴力枚举)
- UVa 1595 - Symmetry【暴力枚举】
- UVa - 725 - Division(暴力枚举)
- 帧率和曝光时间
- 网页布局基础
- tikv的操作
- 微信图片下载问题
- spring加载log4j
- UVA 10825 Anagram and Multiplication(暴力枚举)
- 23种设计模式之行为型模式——策略模式
- 初级_过滤器的整理
- 解决启动程序时先显示带title的白背景,后加载Activity的问题
- webView加载网页留白
- 占位21
- Arcgis Server发布GP服务
- 推荐一款fragment管理器
- PHP message: PHP Warning: PHP Startup: Unable to load dynamic library