zoukankan      html  css  js  c++  java
  • 题解 P1602 【Sramoc问题】

    题目链接

    Solution Sramoc问题

    题目大意:给定(k)(m),试求一个最小的(x)满足其每一位在(0)(k - 1)之前,且(m;|;x)

    搜索


    分析:显然我们可以随手打出一个(bfs),枚举(0)(k-1)添在当前数后面,根据(bfs)的性质,最先搜到的即为答案

    #include <cstdio>
    #include <algorithm>
    #include <queue>
    using namespace std;
    typedef long long ll;
    int out[32],p;
    inline void write(ll x){
    	p = 0;
    	if(x == 0)out[++p] = 0;
    	while(x){
    		out[++p] = x % 10;
    		x /= 10;
    	}
    	for(int i = p;i >= 1;i--)putchar(out[i] + '0');
    }
    queue<ll> Q;
    int k,m;
    int main(){
    	scanf("%d %d",&k,&m);
    	for(int i = 1;i < k;i++)Q.push(ll(i));
    	while(!Q.empty()){
    		ll x = Q.front();Q.pop();
    		if(x % m == 0)return write(x),putchar('
    '),0;
    		for(int i = 0;i < k;i++)Q.push(x * 10 + i);
    	}
    	return 0;
    }
    

    但是这样做会(TLE;or;MLE),原因是因为有很多不需要搜的数我们搜过了

    为什么会有不需要搜的数?

    题目所求的(ans)满足每一位数字上的限制,下文不再赘述.在满足这个限制的前提下,求最小的(ans),满足(ans equiv 0(mod;m))

    那么对于两个数(a,b),若(aequiv b(mod;m))则一定有(a imes 10 + kequiv b imes 10 + k(mod;m))此时我们只需要保留(min{a,b})

    根据(bfs)的性质,就是最先被搜到的那个,开个(vis)数组记录一下(mod;m)的余数有没有出现过即可

    此外,此题有坑:

    • (long long),这个简单(\_\_int128)或者高精度

    如果用(\_\_int128)记得手写输出就好,代码简单就不上注释了

    #include <cstdio>
    #include <algorithm>
    #include <queue>
    using namespace std;
    typedef __int128 ll;
    int out[32],p;
    inline void write(ll x){
        p = 0;
        if(x == 0)out[++p] = 0;
        while(x){
            out[++p] = x % 10;
            x /= 10;
        }
        for(int i = p;i >= 1;i--)putchar(out[i] + '0');
    }
    queue<ll> Q;
    int k,m,vis[1024];
    int main(){
        scanf("%d %d",&k,&m);
        for(int i = 1;i < k;i++)Q.push(ll(i));
        while(!Q.empty()){
            ll x = Q.front();Q.pop();
            if(x % m == 0)return write(x),putchar('
    '),0;
            vis[x % m] = 1;
            for(int i = 0;i < k;i++)if(!vis[(x * 10 + i) % m])Q.push(x * 10 + i);
        }
        return 0;
    }
    
  • 相关阅读:
    vue 解决 数组和对象数据画面不更新
    js 闭包
    php 后台登陆逻辑
    PHP tp3.2模型对数据进行多表查询
    简便的三级联动
    JQ三级联动的写法
    js 选项卡
    HTML DOM对象 获取各种类型的节点
    java script 日期对象Date()
    java script 算术对象
  • 原文地址:https://www.cnblogs.com/colazcy/p/11515025.html
Copyright © 2011-2022 走看看