哈工大第二次热身赛1006(悲剧team12 c9q7m9t4)

来源:互联网 发布:西安证大财富淘宝贷 编辑:程序博客网 时间:2024/06/04 18:28

自己的wa。。。。。。。。。。。。。不知道为什么!!!

#include<iostream>
#include<string>
using namespace std;
string ss0;
string ss1;
int f(int x,int y){
 int flag1=1;int c1=-1;int c2=-1;int p=0;
 int num=0;
 for(int i=x;i<y;i++){
  switch(ss1[i]){
   case'[':p++;flag1=0; break;
   case']':p--;flag1=0;break;
   case'+':flag1=0;if(!p) c1=i; break;
   case'*':flag1=0;if(!p) c2=i; break;
   default: if(ss1[i]==',')num*=8;else num=num+1;break;}

  }
if(flag1){return num;}
else{
    if(c1<0) c1=c2;
    if(c1<0) return f(x+1,y-1);
    int temp1=f(x,c1);
    int temp2=f(c1+1,y);
    switch(ss1[c1]){
        case'+': return temp1+temp2;break;
        case'*': return temp1*temp2;break;}
        }
 }

int main(){//freopen("in.txt","r",stdin);
 int T;
 cin>>T;
 while(T--){
  ss0.clear();
  ss1.clear();
  cin>>ss0;

  int l=ss0.size();
  for(int i=0;i<l;i++)
  { if(i==0) {ss1.push_back(ss0[i]);continue;}
   //if(i==l-1){ss1.push_back(ss0[i]);continue;}
   if(ss0[i]=='['&&ss0[i-1]=='|'){ ss1+="+";ss1.push_back(ss0[i]);continue;}
   if(ss0[i]=='['&&ss0[i-1]==']'){ss1+="*";ss1.push_back(ss0[i]);continue;}
   if(ss0[i]=='|'&&ss0[i-1]==']'){ss1+="+";ss1.push_back(ss0[i]);continue;}

   ss1.push_back(ss0[i]);

  }
  cout<<ss1<<endl;
  l=ss1.size();
  int temp=f(0,l);
  cout<<temp<<endl;

  }

 

  return 0;}

 

 


秦牛的ac。。。。。。。。。。。。。。。。

#include <iostream>
#include <cstring>
#include<cstdio>
using namespace std;

char t[1300];
bool sc[3000];
int astack[3000];
int p;
int to;


int main()
{
    scanf("%d",&to);
    while (to--)
    {
        scanf("%s",t);
        int i;
        int j;
        int nu;
        p=0;
        int l=strlen(t);
        memset(sc,0,sizeof(sc));
        for (i=0;i<l;i++)
        {
            char a=t[i];
            switch (a)
            {
                case '[':astack[p++]=-1;break;
                case '|':nu=0;
                        while (i<l&&(a=='|'||a==','))
                        {
                            if (a=='|') nu++;
                            else nu<<=3;
                            i++;
                            a=t[i];
                        }
                        astack[p++]=nu;
                        i--;
                        break;
                case ']':nu=0;
                        while (astack[p-1]!=-1&&p>=0)
                        {
                            nu+=astack[p-1];
                            sc[p-1]=false;
                            p--;
                        }
                        p--;
                        astack[p++]=nu;
                        sc[p-1]=true;
                        if (p-1>0&&astack[p-2]!=-1&&sc[p-2])
                        {
                            p--;
                            astack[p-1]*=astack[p];
                            sc[p]=false;
       sc[p-1]=true;
                        }
                        break;
            }
        }
        printf("%d/n",astack[0]);
    }
    return 0;
}

原创粉丝点击