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 |
|
Set Name | Test Cases |
---|---|
all | Merged |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
Merged | AC | 83 ms | 3072 KB |