Submission #1965449


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
#define int long long
int MOD=1000000007LL;
string s;
int expr(int &p);
int term(int &p);
void sp(int &p);
int number(int &p); 
int expr(int &p){
  int res=term(p);
  sp(p);
  int q=p;
  while(q+1<(int)s.size()&&s[q]=='>'&&s[q+1]=='>'){
    q+=2;
    sp(q);
    if(q>=(int)s.size()||s[q]=='>') break;
    p+=2;
    sp(p);
    int y=term(p);
    if(y>31) res=0;
    else res>>=y;
    sp(p);
    q=p;
  }
  return res;
}
int term(int &p){
  int res;
  if(s[p]=='S'){
    p++;
    sp(p);
    assert(s[p]=='<');
    p++;
    sp(p);
    int x=expr(p);
    sp(p);
    assert(s[p]=='>');
    p++;
    res=(x*x)%MOD;
  }else{
    res=number(p);
  }
  return res;
}
void sp(int &p){
  while(p<(int)s.size()&&s[p]==' ') p++;
}
int number(int &p){
  int res=0;
  while(p<(int)s.size()&&isdigit(s[p]))
    res=(res*10+s[p++]-'0')%MOD;
  return res;
}
signed main(){
  while(getline(cin,s),s!="#"){
    int p=0;
    cout<<expr(p)<<endl;
  }
  return 0;
}

Submission Info

Submission Time
Task F - Shipura
User beet
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1048 Byte
Status AC
Exec Time 83 ms
Memory 3072 KB

Judge Result

Set Name all
Score / Max Score 100 / 100
Status
AC × 1
Set Name Test Cases
all Merged
Case Name Status Exec Time Memory
Merged AC 83 ms 3072 KB