1. 程式人生 > >洛谷 P2064 奇妙的汽車

洛谷 P2064 奇妙的汽車

play 它的 emp radius main 輸出格式 closed 至少 ++

P2064 奇妙的汽車

題目描述

你有著一輛奇妙的汽車,這輛汽車有著自動加速的功能。打個比方吧,第1天你駕駛著它可以行駛a路程,那麽第2天你可以讓它所走的路程增加到第1天的2~9倍(必須是其中一個整數),也就是2a~9a,第3天它所行駛的路程就將達到第2天的2~9倍……也就是說,這輛車在第i天所走的路程一定是第i-1天的2~9倍,而且還必須是它的整數倍。

現在你迫不及待地開著這輛車要從A城市出發到B城市旅遊,順便在路上展示一下這輛曠世奇車。你已經知道你需要行駛的裏程S,現在請你合理安排第1天的裏程和接下來每天需要增加路程的倍數,好讓你能夠在最短的天數內,恰好到達B城市。

不過,因為你想要好好展示一下你的車,而且也是為了交通安全,你被要求至少要花2天時間,如果不能找到這樣的方案請輸出-1。

輸入輸出格式

輸入格式:

一個正整數S,代表A城市到B城市的裏程。

輸出格式:

一個數,代表最少需要行駛的天數,如果無解輸出-1。

輸入輸出樣例

輸入樣例#1: 復制
15121
輸出樣例#1: 復制
-1
輸入樣例#2: 復制
571
輸出樣例#2: 復制
5

說明

數據規模

對於30%數據,有S<=100;

對於70%數據,有S<=107;

對於100%數據,有9<S<=108。

技術分享圖片
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int s;
struct nond{ int step,lon,v; };
queue<nond>que;
int main(){
    scanf("%d",&s);
    nond beg;beg.lon=1;beg.step=1;beg.v=1;
    que.push(beg);
    
while(!que.empty()){ nond now=que.front(); que.pop(); for(int i=2;i<=9;i++){ nond tmp; tmp.v=i*now.v; tmp.step=now.step+1; tmp.lon=now.lon+tmp.v; if(tmp.lon==s){ cout<<tmp.step; return 0; } if(tmp.lon+tmp.v*2<=s) que.push(tmp); } } cout<<"-1"; }
40分暴力

洛谷 P2064 奇妙的汽車