我太惨了!!!

chenjiangxue 逗比 2019-11-11 21:09:37 2019-11-14 13:19:49 6

今天我花了一个多小时才做完这题!!!呜呜呜!!!

我一看这题,开心,洛谷上做过的,赶紧去看. 结果,木有!!!AC!!!23333333333………………

于是我去找视频,发现正好有,结果老师说上一课讲了,于是我又去翻上一课@@@ 但,我可怜的WIFI断了!!!!23333333333…………

于是,我花了十几分钟重启电脑,没想到,我那亲爱的老爸又有邮件,于是我只能让他用电脑!!!! 不开心!!!!2333333333………………

这样,50多分钟过去了………………

当我坐下,敲了一遍代码,20几分钟过了,我在其他网站上刷了一遍,过了!!! 当我正要提交时,发现,那个网站的数据过了,但不一样!!!! 于是我只好请教小度!!!233333333333………………

我敲了一遍代码,记下了思路,运行成功!!!!!! 我一提交,错了!!! 呜呜呜呜………………我没打文件操作!!!!233333333333333333……………………………………

几秒过后,终于过了,我快哭了!!!!2333333333333333……………………

########################################################################################################################### //[就皮到这儿]

下面有思路 主要考字符串处理,把等式从等号中间断开,左边的区域为left,右边的区域为right。

开四个数组分别用来存储区域left和right中未知数的系数,区域left和right中的常数

先处理区域left,把区域left中含有未知数的数字和常数分别存储进数组,再处理区域right(字符串处理这里省略)

最后把存储区域left和right的未知数系数和常数的数组分别化简(合并同类项),进行平时解方程时候的模拟就好了

代码:

#include<cmath>

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

#define ll long long

#define M(a) memset(a,0,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using namespace std;

const int mxn=1e6;

char s[1000005];

int num[1000005],cun[1000005];
char ch;

bool vis[1000005];

ll kl,kr;  


ll al,ar;  

int main()

{

	freopen("comp.in","r",stdin);

	freopen("comp.out","w",stdout);

    int i,j,mid;

    scanf("%s",s+1);

    int len=strlen(s+1);
    fo(i,1,len) if(s[i]<='z' && s[i]>='a') num[++num[0]]=i,ch=s[i];
    fo(i,1,len) if(s[i]=='=') {mid=i;break;}
    fo(i,1,num[0])
    {
        M(cun);int mul=1;
        for(j=num[i]-1;s[j]>='0' && s[j]<='9';j--)
          cun[++cun[0]]=s[j]-'0',vis[j]=1;
        if(s[j]=='-') mul=-1;
        ll tmp=0,po=1;
        fo(j,1,cun[0]) tmp+=po*cun[j],po*=10;
        if(num[i]<mid) al+=tmp*mul;
        else ar+=tmp*mul;
    }
    fo(i,1,len)
      if(!vis[i] && s[i]<='9' && s[i]>='0')
      {
          ll tmp=0;int mul=1;
          if(s[i-1]=='-') mul=-1;
          fo(j,i,len)
          {
              if(s[j]<'0' || s[j]>'9') break;
              vis[j]=1;
              tmp=tmp*10+s[j]-'0';
          }
          if(i<mid) kl+=tmp*mul;
          else kr+=tmp*mul;
      }
    al-=ar,kr-=kl;
    double ans=(double)kr/(double)al;
    printf("%c=%.3lf\n",ch,ans);
    return 0;
}
{{ vote && vote.total.up }}

共 1 条回复

root 站长

经本站长研究决定,授予你 刷题小能手的称号~