http://acm.hdu.edu.cn/showproblem.php?

pid=1226

为了节省空间。您可以使用vis初始化数组初始化-1。

发现BFSeasy错了地方 始一直WA在这里:就是我int tp=q.front();之后立即q.pop();了,然后才去推断是不是符合条件以break,这样就不能依据q.empty()==1觉得没有找到ans 由于这里WA了

事实上也能够vis[0] == -1来推断

比較不理解的是 当n==0的时候 %n==0的时候怎么处理

//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std; #define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdout)
const ll ll_INF = ((ull)(-1))>>1;
const double EPS = 1e-8;
const double pi = acos(-1.0);
const int INF = 100000000; const int MAXN = 5000+100;
int n,c,m;
int a[MAXN],vis[MAXN],pre[MAXN];//pre记录路径
int ans[MAXN]; queue<int>q; int num; void dfs(int u)
{
ans[num++]=vis[u];
if(pre[u] == -1)return;
dfs(pre[u]);
} void print()
{
num--;
while(!ans[num])num--;
for(int i=num;i>=0;i--)
printf("%c",ans[i]+ (ans[i]>9?'A'-10:'0') );
putchar('\n');
} void solve()
{
CL(vis,0xff);
CL(pre,0xff);
if(!n && !a[0])
{
puts("0");
return;
}
if(!n && a[0])//
{
puts("give me the bomb please");
return;
}
while(!q.empty())q.pop();
for(int i=0;i<m;i++)
if(a[i])
{
int tmp=a[i]%n;
if(vis[tmp]==-1)
{
vis[tmp]=a[i];//记录tmp由a[i]得来
pre[tmp]=-1; //
q.push(tmp);
}
}
int tp=0,flag=0;////
while(!q.empty())
{
tp=q.front();q.pop();
if(!tp){flag=1;break;}
for(int i=0;i<m;i++)
{
int tmp=(tp*c+a[i])%n;
if(vis[tmp] == -1)
{
vis[tmp]=a[i];
pre[tmp]=tp;
q.push(tmp);
}
}
}
if(!flag)
{
puts("give me the bomb please");
return;
}
num=0;
dfs(0);
if(num>500)
{
puts("give me the bomb please");
return;
}
print();
} int main()
{
//IN("hdu1226.txt");
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d%d%d",&n,&c,&m);
char op[5];
for(int i=0;i<m;i++)
{
scanf("%s",op);
if(op[0] >='A' && op[0] <='F') a[i]=op[0]-'A'+10;
else a[i]=op[0]-'0';
}
sort(a,a+m);
solve();
}
return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

最新文章

  1. 03.SQLServer性能优化之---存储优化系列
  2. js作用域
  3. OAF_开发系列02_实现OAF页面的通过个性化多语言开发国际化(案例)
  4. SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
  5. Linux分区介绍
  6. console.log 被重写覆盖以后如何恢复
  7. java 多线程4(死锁)
  8. 写JQuery插件的基本知识
  9. Android——控制UI界面
  10. I2C和SCCB协议的小区别和误区
  11. phantomjs截图的实践
  12. cf D. Renting Bikes
  13. DOM缘起
  14. A2DP和AVRCP蓝牙音频传输协议的应用解释
  15. Linux程序设计之shell程序设计
  16. Android 初了解
  17. TensorLayer官方中文文档1.7.4:API – 数据预处理
  18. win10卸载IE11后从新安装
  19. spring配置文件详解以及beans:beans标签
  20. 【linux】——FTP出现500 OOPS: cannot change directory的解决方法

热门文章

  1. Ajax改动购物车
  2. SE 2014年5月22日
  3. SWT中在treeview中显示图片
  4. 新 Netflix 开源门户
  5. iOS UITableView的Section Footer加入button
  6. Oracle自增列创建方法
  7. WebKit介绍和总结(一)
  8. firefox os 2.1版本号UI接口方面有了质的飞跃
  9. JAVA 数据权限设计
  10. 【设计优化】-使用缓冲(Buffer)提高程序性能