SP1418 题解
思路
因为猫和老鼠的移动速度相等,所以如果两只猫都在老鼠的同一侧,那么老鼠只需反向逃跑,就一定能够逃脱。
所以,两只猫一定要分别在老鼠的两侧。
又因为如果两只猫一只离老鼠很近,另一只离得又很远,那么相当于只有一只猫,离得远的那只猫基本没用。
如果猫和老鼠都在同一条对角线上,并且两只猫距离老鼠的距离相等,老鼠就不能逃脱,因为不论老鼠怎样移动,只要猫跟它以同样的方向移动,最终老鼠一定会被逼至一个角落无法逃脱。
代码
#include <iostream>
#include <cstring>
#include <cmath>
#define int long long
using namespace std;
string s;
int cnt, tmp, sum, pos, f[1005];
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    while(cin >> s >> cnt >> tmp){
        memset(f, 0, sizeof(f));
        pos = 0;sum = 0;
        for(int i = s.size() - 1 ; i >= 0 ; i --){
            if(s[i] >= '0' && s[i] <= '9')sum += (s[i] - '0') * pow(cnt, pos); 
            else sum += (s[i] - 55) * pow(cnt, pos);
            pos++;
        }
        pos = 0;
        while(sum > 0){
            pos++;f[pos] = sum % tmp;sum /= tmp;
        }
        if(pos > 7)cout << "ERROR" << endl;
        else{
            for(int i = 1 ; i <= 7 - pos ; i ++)cout << ' ';
            for(int i = pos ; i >= 1 ;  i --){
                if(f[i] >= 10)cout << char(f[i] + 55);
                else cout << f[i];
            } 
            cout << endl;
        }
    }
    return 0;
}
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号