2020 杭电多校第六场(Multi-University Training Contest 6)

Little Rabbit's Equation

2020 杭电多校第六场(Multi-University Training Contest 6)_第1张图片

 思路:

首先对于每个式子,暴力枚举2~16每个进制是否成立,注意如果符合当前进制K,那么式子中的任何一个数都不能超过K-1;

判断一个进制是否成立就是看式子中的每个数转化为该进制以后,等式是否成立;

#include

using namespace std;
typedef long long ll;
string s;
vectorv[4];
char flag;

bool check(ll x){
    ll a=0,b=0,c=0;
    for(int i=0;i='A'&&v[0][i]<='F')
        {
            if(v[0][i]-'A'+10>=x) return 0;
            a=a*x+v[0][i]-'A'+10;
        }
        else 
        {
            if(v[0][i]-'0'>=x) return 0;
            a=a*x+v[0][i]-'0';
        }
    }
    for(int i=0;i='A'&&v[1][i]<='F')
        {
            if(v[1][i]-'A'+10>=x) return 0;
            b=b*x+v[1][i]-'A'+10;
        }
        else 
        {
            if(v[1][i]-'0'>=x) return 0;
            b=b*x+v[1][i]-'0';
        }
    }
    for(int i=0;i='A'&&v[2][i]<='F')
        {
            if(v[2][i]-'A'+10>=x) return 0;
            c=c*x+v[2][i]-'A'+10;
        }
        else 
        {
            if(v[2][i]-'0'>=x) return 0;
            c=c*x+v[2][i]-'0';
        }
    }
//    cout<>s){
        for(int i=0;i<3;i++) v[i].clear();
        int tmp=2;
        int num=s.size(),l=0;
        for(int i=0;i='0'&&s[i]<='9'){
                v[l].push_back(s[i]);
            }
            else if(s[i]>='A'&&s[i]<='F'){
                v[l].push_back(s[i]); 
            }
            else{
                l++;
                if(l==1){
                    flag=s[i];
                }
            }
        }
        bool flag1=0;
        for(int i=2;i<=16;i++){
            if(check(i)){
                cout<

Divisibility 

2020 杭电多校第六场(Multi-University Training Contest 6)_第2张图片

 官方题解证明:

2020 杭电多校第六场(Multi-University Training Contest 6)_第3张图片

#include 
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const int N=1e5+10;

int main()
{
    int t;cin>>t;
    while(t--)
    {
        ll b,x;
        cin>>b>>x;
        if(b%x==1)
            cout<<"T"<

 

你可能感兴趣的:(基础算法——数论,思维)