zoukankan      html  css  js  c++  java
  • PAT(顶级)2020年秋季考试 7-2 Number Game (35分)

    7-2 Number Game (35分)
     

    A number game is to start from a given number A, and to reach the destination number B by a sequence of operations.

    For the current number X, there are 3 types of operations:

    • X=X+1
    • X=X1
    • X=X×N

    Your job is to find the minimum number of steps required to reach B from A.

    Input Specification:

    Each input file contains several test cases. The first line gives a positive integer K (≤10) which is the total number of cases. For each case, three integers are given: A, B and N, where − and 1. All the numbers in a line are separated by a space.

    Output Specification:

    For each test case, print in a line the minimum number of steps required to reach B from A.

    Sample Input:

    3
    3 11 2
    -5 -12 3
    -2 1000 7
    
     

    Sample Output:

    3
    2
    13

    AC代码:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn=200005;
     5 bool vis[maxn];
     6 queue<int> que,q;
     7 int handle(int a,int b,int n)
     8 {
     9     if(a==b) return 0;
    10     memset(vis,0,sizeof(vis));
    11     vis[a]=true;
    12     while(!que.empty()) que.pop();
    13     while(!q.empty()) q.pop();
    14     que.push(a);
    15     q.push(0);
    16     while(!que.empty())
    17     {
    18         int x=que.front(),y=q.front();
    19         que.pop();q.pop();
    20         int z=x+1;
    21         if(z<200000 && vis[z]==false){
    22             if(z==b) return y+1;
    23             vis[z]=true;
    24             que.push(z);
    25             q.push(y+1);
    26         }
    27         z=x-1;
    28         if(z>0 && vis[z]==false){
    29             if(z==b) return y+1;
    30             vis[z]=true;
    31             que.push(z);
    32             q.push(y+1);
    33         }
    34         z=x*n;
    35         if(z<200000 && vis[z]==false){
    36             if(z==b) return y+1;
    37             vis[z]=true;
    38             que.push(z);
    39             q.push(y+1);
    40         }
    41     }
    42 }
    43 int main()
    44 {
    45     int t;
    46     for(scanf("%d",&t);t;--t){
    47         int a,b,n,ans=0;
    48         scanf("%d %d %d",&a,&b,&n);
    49         if(a==b) ans=0;
    50         else if(a<b){
    51             if(a>0) ans=handle(a,b,n);
    52             else if(a<=0 && b>0) ans=handle(1,b,n)+1-a;
    53             else ans=b-a;
    54         }
    55         else{
    56             if(a<0) ans=handle(-a,-b,n);
    57             else if(a>=0 && b<0) ans=handle(1,-b,n)+a+1;
    58             else ans=a-b;
    59         }
    60         printf("%d
    ",ans);
    61     }
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    手写vite
    单点登录的实现原理
    vue中和react中key的用法
    手写MVVM
    rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台
    博图TIA中ModbusRTU_CRC校验程序的实现
    博图TIA中ModbusRTU Over TCP/IP通讯的实现
    webpack之file-loader和url-loader的区别
    Webpack中Loader和Plugin的区别?编写Loader,Plugin的思路?
    spark-sql 与hive 常用函数
  • 原文地址:https://www.cnblogs.com/lglh/p/13711898.html
Copyright © 2011-2022 走看看