hdu--1104--Remainder(简单的bfs)
Remainder
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4078 Accepted Submission(s): 1014
You should know that if a = b * q + r (q > 0 and 0 <= r < q), then we have a % q = r.
The input is terminated with three 0s. This test case is not to be processed.
0 0 0
/*
Name: hdu--1104--Remainder
Copyright: ©2017 日天大帝
Author: 日天大帝
Date: 22/04/17 09:11
Description: bfs
a = b * q + r (q > 0 and 0 <= r < q),
题上的取余运算和%运算不一样,%运算能产生负值所以要 (n%k+k)%k这样,才等于题意的取余
这个题用vis标记产生过的数据,同时用%km和%k进行剪枝优化
*/
#include<cstring>
#include<iostream>
#include<queue>
#include<string>
using namespace std;
struct node{
int num,steps;
string str;
};
;
bool vis[MAX];
int n,m,k,mk,final_cmp;
void bfs(){
node start;
start.num = n;
start.str = "";
start.steps = ;
vis[(n%k+k)%k] = ;
queue<node> q;
q.push(start);
while(!q.empty()){
node a,temp = q.front();q.pop();
if(final_cmp == ((temp.num%k)+k)%k){
cout<<temp.steps<<endl<<temp.str<<endl;
return ;
}
; i<; ++i){
a = temp;
){
a.num += m;
a.str += '+';
}){
a.num -= m;
a.str += '-' ;
}){
a.num *= m;
a.str += '*';
}else{
a.num = (a.num%m+m)%m;
a.str += '%' ;
}
a.num %= mk;//%k之后%m结果就错啦,10%(15) !=10%3%5
if(vis[(a.num%k+k)%k])continue;//%k缩小范围剪枝
a.steps++;
vis[(a.num%k+k)%k] = ;
q.push(a);
}
}
cout<<"<<endl;
}
int main(){
ios::sync_with_stdio(false);
while(cin>>n>>k>>m,n||m||k){//输入有正负不能用n+m+k
memset(vis,,sizeof(vis));
mk = m*k;
final_cmp = ((n+)%k+k)%k;
bfs() ;
}
;
}
hdu--1104--Remainder(简单的bfs)的更多相关文章
- HDU 1104 Remainder (BFS)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1104 题意:给你一个n.m.k,有四种操作n+m,n-m,n*m,n%m,问你最少经过多少步,使得最后 ...
- HDU 1104 Remainder(BFS 同余定理)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1104 在做这道题目一定要对同余定理有足够的了解,所以对这道题目对同余定理进行总结 首先要明白计算机里的 ...
- hdu - 1104 Remainder (bfs + 数论)
http://acm.hdu.edu.cn/showproblem.php?pid=1104 注意这里定义的取模运算和计算机的%是不一样的,这里的取模只会得到非负数. 而%可以得到正数和负数. 所以需 ...
- HDU 1104 Remainder( BFS(广度优先搜索))
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU 1104 Remainder (BFS(广度优先搜索))
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU 1104 Remainder (BFS求最小步数 打印路径)
题目链接 题意 : 给你N,K,M,N可以+,- ,*,% M,然后变为新的N,问你最少几次操作能使(原来的N+1)%K与(新的N)%k相等.并输出相应的操作. 思路 : 首先要注意题中给的%,是要将 ...
- hdu.1104.Remainder(mod && ‘%’ 的区别 && 数论(k*m))
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- HDU 1104 Remainder
与前一题类似,也是BFS+记录路径, 但是有很多BUG点, 第一MOD操作与%不同i,其实我做的时候注意到了我们可以这样做(N%K+K)%K就可以化为正数,但是有一点要注意 N%K%M!=N%M%K; ...
- HDU 1253:胜利大逃亡(简单三维BFS)
pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- HDU 2717 Catch That Cow --- BFS
HDU 2717 题目大意:在x坐标上,农夫在n,牛在k.农夫每次可以移动到n-1, n+1, n*2的点.求最少到达k的步数. 思路:从起点开始,分别按x-1,x+1,2*x三个方向进行BFS,最先 ...
随机推荐
- 如何查询oracle中的关键字
如何查询oracle中的关键字,执行: select * from v$reserved_words
- El表达式取map值
map el表达取值 ${initMap['kehuList']}
- ajax来判断用户是否登录与添加
首先在用ajax之前,先说一下JSON: JSON:javascript object notation js对象标记 对于json,我们只需要知道如何定义json?如何输出?怎么遍历? 1.定义 ...
- HTML5 进阶系列:文件上传下载
前言 HTML5 中提供的文件API在前端中有着丰富的应用,上传.下载.读取内容等在日常的交互中很常见.而且在各个浏览器的兼容也比较好,包括移动端,除了 IE 只支持 IE10 以上的版本.想要更好地 ...
- (转载)oracle的v$sqlarea表
原文摘自:http: [V$SQLAREA] 本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面 ...
- VB6之调整任务栏按钮的位置
好无聊,睡前一更~ XP的任务栏没办法像win7那样随意拖动交换顺序,偶觉不爽,遂写程序搞之.这个不算什么新东西,参考了很多别人写的东东. 程序启动后,会在右下角托盘区显示钢铁侠的图标.右键击之,可选 ...
- 快速查询List中指定的数据
时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...
- editPuls 常用知识
1.创建模板 1).创建模板页(*.html) 2).Tools->Preferences->File->Templates->HTML->file name重新选定模板 ...
- Java String charAt()方法
描述 此方法返回位于字符串的指定索引处的字符.该字符串的索引从零开始. 语法 此方法定义的语法如下: public char charAt(int index) 参数 这里是参数的细节: index ...
- 关于sessionStorage的移动端兼容问题
最近在开发移动端项目时,需要用到的本地存储的地方不少.都是一些只要记住当前打开窗口的用户数据就行,所以我选择用的sessionStorage.使用场景如下: A.html页面需要记录一条数据{a:1, ...