首页 > 其他分享 >旅行前的准备 (25分)

旅行前的准备 (25分)

时间:2023-05-30 16:39:04浏览次数:57  
标签:同学 25 旅行 int 样例 num 准备 include LX


LX同学想要游遍整个中国甚至全世界!所以这个国庆假期她计划去长沙玩。但是在她做旅行前的准备的时候,她收到了老师的作业,并且要求在国庆假期结束之前上交!LX同学非常的生气,告诉了你这个消息。你也觉得实在是太过分了,但是没有办法,只好帮助LX同学完成她的作业。

老师给了LX同学两个整数,分别是 x 和 y 。每次LX同学可以从中选择一个数 num ,把这个数变成 (num+2) mod p 或 (num∗2) mod p 或 (num∗num) mod p ,请问,最少需要多少次操作,能使这两个整数相等。
输入格式:

一行三个正整数 x,y,p(3≤p≤106,1≤x,y<p) ,保证p 是一个奇数。
输出格式:

一行一个整数表示最少操作次数。
样例1
输入样例

3 4 5

输出样例

1

样例2
输入样例

2 3 5

输出样例

2

提示

样例一解释:3∗3≡4(mod5) 。

样例二解释:3∗2≡1(mod5) ,1∗2≡2(mod5) 。

这道题我用暴力bfs的做法只能过一部分的测试点,可能是哪里能有化吧,毕竟光是检测是否在队列中都需要进行set里的count方法,数据量又略大,可能还有啥更方便的标记已入队的方法吧.

25分的题只得了13分

//
// Created by TIGA_HUANG on 2020/10/6.
//

#include <iostream>
#include <climits>
#include <set>
#include <queue>

using namespace std;

int p, depth;

struct node {
    int x;
    int y;
    int layer;
};

bool operator<(const node &x, const node &y) {
    if (x.x < y.x) return true;
    return x.x == y.x && x.y < y.y;
}

int ans = INT_MAX;
set<node> inq;

void bfs(int x, int y) {
    queue<node> q;
    q.push({x, y});
    inq.insert({x, y});
    while (!q.empty()) {
        node t = q.front();
        int layer = t.layer;
        if (t.x == t.y) {
            cout << t.layer;
            return;
        }
        x = t.x % p;
        y = t.y % p;
        q.pop();
        t.x = (x % p + 2 % p) % p;
        t.y = y;
        t.layer = layer + 1;
        if (!inq.count(t)) {
            q.push(t);
            inq.insert(t);
        }
        t.x = (x % p + x % p) % p, t.y = y;
        if (!inq.count(t)) {
            q.push(t);
            inq.insert(t);
        }
        t.x = (x % p * x % p) % p, t.y = y;
        if (!inq.count(t)) {
            q.push(t);
            inq.insert(t);
        }
        t.x = x, t.y = (y % p + 2 % p) % p;
        if (!inq.count(t)) {
            q.push(t);
            inq.insert(t);
        }
        t.x = x, t.y = (y % p + y % p) % p;
        if (!inq.count(t)) {
            q.push(t);
            inq.insert(t);
        }
        t.x = x, t.y = (y % p * y % p) % p;
        if (!inq.count(t)) {
            q.push(t);
            inq.insert(t);
        }
    }
}

int main() {
    int x, y;
    cin >> x >> y >> p;
    bfs(x % p, y % p);
    return 0;
}


标签:同学,25,旅行,int,样例,num,准备,include,LX
From: https://blog.51cto.com/u_16144724/6380324

相关文章

  • 哥尼斯堡的“七桥问题” (25分)
    哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(LeonhardEuler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令......
  • 是不是顺子 (25分)
    本题目要求对读入的五张Poker牌进行判断:它是否是一个正常的顺子。说明:34567890JQKA2wW相信大家知道一二,为简化操作,0代表10,w和W代表小王和大王,大,小王可代替任意的牌哟。编程判断输入的五张牌是否会构成一个顺子(方案多个时,输出较大的,34567和0JQKA分别是最小和最大的顺子)输入格式:输......
  • 7-3 树的同构 (25分)
    7-3树的同构(25分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构......
  • 堆栈模拟队列 (25分)
    堆栈模拟队列(25分)设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:intIsFull(StackS):判断堆栈S是否已满,返回1或0;intIsEmpty(StackS):判断堆栈S是否为空,返回1或0;voidPush(StackS,ElementTypeitem):将......
  • hmac(md5,sha256) 魔改算法逆向
    2bebb2b85345bac93a790d1a6986b3d5经验1貌似特征码,需要在从伪代码切换到汇编模式,再点击看具体值2找出特征码,然后google再带算法,再带csource如md50x242070DBcsource3md5和sha1在transfrom4个特征相同,sha1多两个重命名经验根据上下文关系,需要点进去发现特征量,验......
  • 关于vi编辑出现E325: ATTENTION的解决方案
    解决方案 1-vifilename进入编辑器,查看报错信息,出现E325:ATTENTION例如:E325:ATTENTIONFoundaswapfilebythename"rm/var/opt/gitlab/gitlab-rails/etc/.gitlab.yml.swp"2-复制Foundaswapfilebythename之后的信息,并退出......
  • 代码随想录算法训练营第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404
     第六章二叉树part04 今日内容:  ●  110.平衡二叉树 ●  257. 二叉树的所有路径 ●  404.左叶子之和   详细布置  迭代法,大家可以直接过,二刷有精力的时候 再去掌握迭代法。  110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是......
  • 华为云云服务器环境准备
    首先我们去华为云上面搞几台服务器,华为云:https://www.huaweicloud.com/?abv=2023052622525972虚拟IP的操作在华为云上面是可以的,但是在阿里云上面是不能的,阿里云是不支持虚拟IP的,因为阿里云提供了负载均衡,让你买它的负载均衡,所以在阿里云你就不要去操作了,所以这里我就在华为云......
  • 文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题
    七、设计算法,仅使用三次实数乘法即可完成复数a+bi和c+di相乘。算法需接收a、b、c和d为输入,分别生成实部ac-bd和虚部ad+bc。文心一言:可以使用如下算法来计算复数a+bi和c+di的积,且只需进行三次实数乘法:1.将a和b相乘,得到ab;2.将c和d相乘,得到cd;3.将ab+cd赋......
  • Java-Day-25( 字节输入流 + FileInputStream 和 FileOutputStream + FileReader 和 Fi
    Java-Day-25InputStream(字节输入流)InputStream抽象类是所有类字节输入流的超类InputStream常用的子类FileInputStream:文件输入流BufferedInputStream:缓冲字节输入流ObjectInputStream:对象字节输入流FileInputStream和FileOutputStreamFileInputStream(文......