UVA - 10825 Anagram and Multiplication 暴力
来源:互联网 发布:java分销系统源码 编辑:程序博客网 时间:2024/06/11 12:44
题目大意:给出m和n,要求你求出一个m位的n进制数,这个数分别乘上1,2,..,m之后的值是这个数每位上的数的排列组合中的其中一种,求这个数
解题思路:这题的难点是怎么枚举这个数。因为要分别乘上1,2,..,m,如果我们枚举这个数的最后一位的话,乘上这些数后不然得出最后一位的值,而这些值必然是属于这个数的,只是不知道再那个位置上而已,所以要对这些数进行排列组合,然后再进行确认,确认的过程就是暴力的过程
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 410int m, n, vis[maxn], tmp[10], ans[10], pos[10], cnt[maxn];bool ck() {int c[10];c[m] = 0;for(int i = 0; i < m; i++)ans[i] = c[i] = tmp[pos[i]];for(int i = 2; i <= m; i++) {for(int j = 0; j < m; j++) {c[j+1] += (c[j] + ans[j]) / n;c[j] = (c[j] + ans[j]) % n;}if(c[m])return false;for(int j = 0; j < m; j++)vis[c[j]]++;bool flag = false;for(int j = 0; j < m; j++)if(vis[c[j]] != cnt[c[j]])flag = true;for(int j = 0; j < m; j++)vis[c[j]]--;if(flag)return false;}return true;}bool dfs(int cur) {if(cur == m)return ck();for(int i = cur; i < m; i++){swap(pos[i],pos[cur]);if(dfs(cur+1))return true;swap(pos[i],pos[cur]);}return false;}bool check(int cur) {int t = 0;memset(vis,0,sizeof(vis));memset(cnt,0,sizeof(cnt));for(int i = 0; i < m; i++) {t = (t + cur) % n;tmp[i] = t;pos[i] = i; }for(int i = 0; i < m; i++)cnt[tmp[i]]++;return dfs(0);}int main() {while(scanf("%d%d", &m, &n) != EOF && m + n) {bool flag = false;for(int i = 1; i < n; i++) if(check(i)) {flag = true;break;}if(!flag)printf("Not found.\n");else{for(int i = m - 1; i > 0; i--)printf("%d ",ans[i]);printf("%d\n",ans[0]);}}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 10825(暴力)
- UVa 195 - Anagram
- UVA 148 Anagram checker
- uva 195Anagram
- Matrix Chain Multiplication uva
- UVA Matrix Chain Multiplication
- Matrix Chain Multiplication UVA
- UVA Multiplication Table
- UVA 10825 Yummy Triangular Pizza (暴力)
- Coursera Machine Learning 学习笔记(六)
- service和activity通信
- tableview的两个获得重用cell方法的区别
- 关于STL中的map和hash_map (转)
- atitit。mssql sql server 转换mysql 及 分页sql ast的搭建
- UVA - 10825 Anagram and Multiplication 暴力
- c#网络编程常用特性之多线程
- hdu 5029 树链剖分+链表
- Dijkstra算法
- dlopen, dlsym等动态链接库函数解析
- C#中按引用传递与按值传递的区别
- kvo示例代码
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- ref和out的用法及区别