水题求调
查看原帖
水题求调
517637
瀛洲仙子楼主2023/1/14 22:24

rt,wa*1

#include<bits/stdc++.h>
using namespace std;
string In()
{
    char c;string s="";
    while(cin>>c)s+=c;
    return s;
}
pair<string,string>parse(string x)
{
    int pos=x.find("=");
    string a=x.substr(0,pos);
    string b=x.substr(pos+1,x.length()-pos-1);
    return pair<string,string>(a,b);
}
vector<string>split(string k)
{
    if(k[0]^'-')k='+'+k;
    vector<string>tmp;
    string at="";at+=k[0];
    for(int i=1;i<k.length();++i)
        if(isalnum(k[i]))at+=k[i];
        else
        {
            tmp.push_back(at);
            at="";at+=k[i];
        }
    if(at.size())tmp.push_back(at);
    return tmp;
}
int tr(string x)
{
    int xx=0,y=1,i;
    for(i=0;!isdigit(x[i]);++i)
        if(x[i]=='-')y=-1;
    for(;i<x.length();++i)
        xx=xx*10+(x[i]-'0');
    return xx*y;
}
int unknown(vector<string>x)
{
    vector<string>t;
    for(int i=0;i<x.size();++i)
    {
        bool known=true;
        for(int j=0;j<x[i].length();++j)
            if(isalpha(x[i][j]))
            {known=false;break;}
        if(!known)
        {
        	x[i].erase(x[i].end()-1);
            t.push_back(x[i]);
        }
    }
    int ret=0;
    for(int i=0;i<t.size();++i)
        ret+=tr(t[i]);
    return ret;
}
int uknown(vector<string>x)
{
    vector<string>t;
    for(int i=0;i<x.size();++i)
    {
        bool known=true;
        for(int j=0;j<x[i].length();++j)
            if(isalpha(x[i][j]))
            {known=false;break;}
        if(known)
        {
            //x[i].erase(x[i].end()-1);
            t.push_back(x[i]);
        }
    }
    int ret=0;
    for(int i=0;i<t.size();++i)
        ret+=tr(t[i]);
    return ret;
}
int main()
{
    string expr=In();char let;
    pair<string,string>k=parse(expr);
    string left=k.first,right=k.second;
    vector<string>lexpr=split(left);
    vector<string>rexpr=split(right);
    for(int i=0;i<lexpr.size();++i)
        for(int j=0;j<lexpr[i].length();++j)
            if(isalpha(lexpr[i][j]))
                {let=lexpr[i][j];break;}
    for(int i=0;i<rexpr.size();++i)
        for(int j=0;j<rexpr[i].length();++j)
            if(isalpha(rexpr[i][j]))
                {let=rexpr[i][j];break;}
    double luk=unknown(lexpr);
    double ruk=unknown(rexpr);
    double lnum=uknown(lexpr);
    double rnum=uknown(rexpr);
    //cout<<luk<<endl<<ruk;
    luk-=ruk;rnum-=lnum;
    cout<<let<<"="<<fixed<<setprecision(3)<<rnum/luk;
}
2023/1/14 22:24
加载中...