1 条题解

  • 0
    @ 2024-9-26 18:27:47
    #include <bits/stdc++.h>
    
    using namespace std;
    
    struct num
    {
        bool isUnknown = false;
        int N;
    
        string toString(){
            stringstream ss;
            ss<<N;
            if(isUnknown){
                ss<<"x";
            }
            return ss.str();
        }
    };
    
    vector<char> v,vl,vr;
    vector<num> nl,nr;
    char unknownC;
    
    
    
    
    int main(){
        char c;
        while (scanf("%c",&c)!=EOF)
        {
            v.push_back(c);
        }
        for(int i = 0;i<v.size();i++){
            if(v[i]=='='){
                for(int j = i + 1;j<v.size();j++){
                    if(j == i + 1 &&v[j]!='-'){
                        vl.push_back('+');
                    }
                    vr.push_back(v[j]);
                }
                break;
            }
            if(i == 0 &&v[i]!='-'){
                vl.push_back('+');
            }
            vl.push_back(v[i]);
        }
        bool isFu = false;
        vector<int> numBuffer;
        for(int i = 0;i<vl.size();i++){
            num n;
            char curC = vl[i];
            //cout<<"AT:"<<i;
            if(curC == '-'){
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
                n.N = curN;
                if(n.N != 0){
                    nl.push_back(n);
                }
                isFu = true;
                numBuffer.clear();
            }
            else if(curC == '+'){
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
              
                n.N = curN;
                if(n.N != 0){
                    nl.push_back(n);
                }
                isFu = false;
                numBuffer.clear();
                //cout<<"Start R";
            }
            else if(curC >= '0' && curC <= '9'){
                numBuffer.push_back(curC - '0');
            }
            else if(curC >= 'a'&&curC<='z'){
                //cout<<"Find Unk:"<<curC<<endl;
                unknownC = curC;
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
                n.N = curN;
                if(n.N == 0){
                    n.N = 1;
                }
                n.isUnknown = true;
                if(n.N != 0){
                    //cout<<"Push Unk:"<<nl.size()<<endl;
                    nl.push_back(n);
                }
                numBuffer.clear();
            }
            if(i == vl.size()-1){
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
              
                n.N = curN;
                if(n.N != 0){
                    nl.push_back(n);
                }
                numBuffer.clear();
                break;
            }
        }
        //Read Right
        isFu = false;
        numBuffer.clear();
        for(int i = 0;i<vr.size();i++){
            num n;
            char curC = vr[i];
            //cout<<"AT:"<<i;
            if(curC == '-'){
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
                n.N = curN;
                if(n.N != 0){
                    nr.push_back(n);
                }
                isFu = true;
                numBuffer.clear();
            }
            else if(curC == '+'){
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
              
                n.N = curN;
                if(n.N != 0){
                    nr.push_back(n);
                }
                isFu = false;
                numBuffer.clear();
                //cout<<"Start R";
            }
            else if(curC >= '0' && curC <= '9'){
                numBuffer.push_back(curC - '0');
            }
            else if(curC >= 'a'&&curC<='z'){
                unknownC = curC;
                //cout<<"Find Unk:"<<curC<<endl;
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
                n.N = curN;
                if(n.N == 0){
                    n.N = 1;
                }
                n.isUnknown = true;
                if(n.N != 0){
                    //cout<<"Push Unk:"<<nl.size()<<endl;
                    nr.push_back(n);
                }
                numBuffer.clear();
            }
            if(i == vr.size()-1){
                int curN = 0;
                int K = 1;
                for(int j = numBuffer.size()-1;j>=0;j--){
                    curN += (numBuffer[j]*K);
                    K*=10;
                }
                if(isFu == true){
                    curN *= -1;
                }
              
                n.N = curN;
                if(n.N != 0){
                    nr.push_back(n);
                }
                numBuffer.clear();
                break;
            }
        }
        //cout<<vl[1];
        //cout<<nr[0].toString();
    
        //Move All unknown to left
    
        float unknownXi = 0;
        float Sum = 0;
        for(int i = 0;i<nl.size();i++){
            if(nl[i].isUnknown){
                unknownXi += (float)nl[i].N;
            }
        }
        for(int i = 0;i<nr.size();i++){
            if(nr[i].isUnknown){
                unknownXi -= (float)nr[i].N;
            }
        }
        for(int i = 0;i<nl.size();i++){
            if(!nl[i].isUnknown){
                Sum -= (float)nl[i].N;
                //cout<<"Cut:"<<nl[i].N<<endl;
            }
        }
        for(int i = 0;i<nr.size();i++){
            if(!nr[i].isUnknown){
                Sum += (float)nr[i].N;
                //cout<<"Add:"<<nr[i].N<<endl;
            }
        }
        float ans = (Sum/unknownXi);
        //cout<<unknownXi;
        //cout<<ans;
        cout<<unknownC<<"=";
        printf("%.3f",ans);
    }
    
    • 1

    信息

    ID
    521
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    71
    已通过
    17
    上传者