uva10825 (暴力)
来源:互联网 发布:java变量怎么初始化 编辑:程序博客网 时间:2024/06/11 18:29
题目大意:
给出m位n进制的数,要求它乘以2~m,求是否存在这样的数,乘以2~m之后得到的数是原来的数组成的数字。
思路:
搞了快一小时。。唉。
首先,由于是乘以2~m后都要是原来的数字所组成的,所以假如最后一位是a,那么里面必定存在一位是(2*a)%n 也必定存在一个数属于2~m 乘以a对n求余存在于这m位数当中。
枚举最后一位数,最后一位数肯定位于1~n-1 因为肯定不能超过进制数,也不可能是0 如果是0的话 那么肯定不可能存在这么一串数字。
代码:
#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <algorithm>int num[7];int vis[7];int order[7];int n,m;bool solve(int x) { for(int i = 2; i <= m; i++) order[i] = i; do { bool flag2 = true; for(int i = 2; i <= m; i++) { memset(vis,0,sizeof(vis)); vis[i] = 1; int c = x * i / n; for(int j = 2; j <= m; j++) { int temp = (num[order[j]] * i + c) % n; c = (num[order[j]] * i + c) /n; bool flag = false; for(int k = 1; k <= m; k++) { if(temp == num[k] && !vis[k]) { vis[k] = 1; flag = true; break; } } if(!flag) { flag2 = false; break; } } if(!flag2) break; } if(flag2) return true; }while(next_permutation(order + 2, order + m + 1)); return false;}int main() { while(scanf("%d %d",&m,&n) && m) { bool flag = false; for(int i = 1;i < n; i++) { for(int j = 1; j <= m; j++) { num[j] = (i * j) % n;//i是枚举的最后一位 num记录的是数字中的每一位 } if(solve(i)) { flag = true; for(int j = m; j >= 2; j--) printf("%d ",num[order[j]]); printf("%d\n",i); break; } } if(!flag) printf("Not found.\n"); }}
0 0
- uva10825 (暴力)
- uva10825(暴力)
- 【USACO】Prime Palindromes(暴力暴力再暴力)
- hdoj 1334(暴力)
- 宝石(暴力搜)
- Safecracker(暴力)
- 最大乘积(暴力)
- poj_1166_The Clocks(暴力)
- zoj3511(暴力)
- Coder(暴力)
- poj1840(暴力+hash)
- 搜索(字符串暴力)
- HLJUOJ1117(暴力模拟)
- HLJUOJ1122(暴力枚举)
- Maximum Product(暴力)
- Fractions Again?!(暴力)
- HDU2566(暴力枚举)
- HDU2555(模拟暴力)
- 消息系统Kafka介绍
- 关于linux
- C++ STL stack/queue
- Makefile 学习日记(五)——makefile中的函数
- 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
- uva10825 (暴力)
- Spark内核讲解之弹性分布数据集(一)
- android Style(样式)的解析
- PB中,在用grid形式的数据窗口中,跨列标题头的制作方法
- stmmac ethernet
- Spark内核介绍:Spark在运行时会把Stage包装成任务提交 (二)
- 代理模式
- LayoutInflater 填充器填充布局,布局属性失效问题
- 模式、关系范式与关系运算