zoukankan      html  css  js  c++  java
  • HDU 1226 BFS

    注意密码位数<=500 输出注意十六进制改成字母

    要点题目都已说明 ac就好

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    
    #define N 5100
    #define L(x) (x<<1)
    #define R(x) (x<<1|1)
    using namespace std;
    
    inline int Max(int a,int b){return a>b?a:b;}
    inline int Min(int a,int b){return a<b?a:b;}
    int a[20],k,n,c;
    int vis[N]; //取模后出现的可能只会是 [0, n-1]
    int pre[N];
    int num[N];
    void BFS(){
    	memset(vis, 0, sizeof(vis));
    	memset(pre, -1, sizeof(pre));
    	queue<int>q;
    	int mod;
    
    	for(int i=0;i<k;i++)
    	{
    		if(!a[i])continue;
    		mod = a[i]%n;
    		if(!vis[mod])
    		{
    			vis[mod] = 1;
    			num[mod] = a[i];
    			q.push(mod);			
    		}
    
    		if(a[i]%n == 0)
    		{if(a[i]<=10)printf("%d
    ",a[i]); else printf("%c
    ",a[i]-10+'A');return ;}
    	}
    	bool su =false;
    	while(!q.empty() && su == false){
    		mod = q.front(); q.pop();
    		for(int i=0;i<k;i++)
    		{
    			int now = (mod*c + a[i])%n;
    			if(now == 0){ pre[now] = mod;num[now]=a[i]; su = true; break; }
    			if(!vis[now])
    			{
    				q.push(now);				
    				vis[now]=1;
    				pre[now] = mod;
    				num[now] = a[i];
    			}
    		}
    	}
    
    	if(su == false){printf("give me the bomb please
    ");return ;}
    	int top=0,ans[N];
    	for(int i=0; i!=-1;i=pre[i])
    		ans[top++]=num[i];
    	if(top>500){printf("give me the bomb please
    ");return ;}
    	for(int i=top-1;i>=0;i--)
    		if(ans[i]>=10)
    			printf("%c",ans[i] - 10 +'A');
    		else 
    			printf("%d",ans[i]);
    	printf("
    ");
    }
    
    int main(){
    	int T;scanf("%d",&T);
    
    	while(T--){
    		scanf("%d %d %d",&n,&c,&k);
    
    		for(int i=0;i<k;i++){
    			char c=getchar();
    			while( !( '0'<=c && c<='9') && !( 'A'<=c && c<='F')) c=getchar();
    
    			if( '0'<=c && c<='9' ) a[i] = c - '0';
    			else a[i] = c - 'A' +10;
    		}
    
    		sort(a,a+k);
    
    		if(n == 0){
    			if(a[0])printf("give me the bomb please
    ");
    			else printf("0
    ");
    			continue;
    		}
    
    		BFS();
    	}
    	return 0;
    }
    /*
    3
    22 10
    3
    7 0 1
    
    2 10
    1
    1
    
    25 16
    3
    A B C
    
    */


     

  • 相关阅读:
    编程题练习
    算法:快速排序
    ansible的playbook剧本
    Django框架之验证码生成示例
    Django之auth模块用户认证模块
    Django框架之models和不依赖Qquery的ajax请求
    Django框架之序列化和上传文件
    Django高级篇一RESTful架构及API设计
    Git工具和GitHub的使用
    python之Flask框架
  • 原文地址:https://www.cnblogs.com/riskyer/p/3362202.html
Copyright © 2011-2022 走看看