Submission #202970

#TimeUsernameProblemLanguageResultExecution timeMemory
202970algorithm16Retro (COCI17_retro)C++14
35 / 100
169 ms92412 KiB
#include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; int n,m,d[3]={1,0,-1},y1; pair <int,string> dp[105][105][105]; char c[105][105]; pair <int,string> rek(int x,int y,int sum) { if(x==-1) { //cout << x << " " << y << " " << sum << "\n"; if(sum==0) return make_pair(0,""); else return make_pair(-1e9,""); } if(dp[x][y][sum].first!=-1) return dp[x][y][sum]; string ret=""; int b=-1e9; for(int i=0;i<3;i++) { if(y+d[i]<0 or y+d[i]>=m) continue; int y2=y+d[i],a=0,cnt=0; if(c[x][y2]=='(') a=1; if(c[x][y2]==')') { if(sum==0) continue; a=-1; } string s; if(a!=0) s+=c[x][y2]; if(c[x][y2]=='*') { s+=rek(-1,y2,sum+a).second; cnt=rek(-1,y2,sum+a).first; } else { s+=rek(x-1,y2,sum+a).second; cnt=rek(x-1,y2,sum+a).first+(a!=0); } //if(x==2 && y==1 && sum==1) cout << a << " " << s << "\n"; if(cnt<0) continue; if(ret.size()==0 && s.size()==0) { ret=s; b=cnt; } if(cnt>ret.size() or (cnt==ret.size() && s<ret)) { ret=s; b=cnt; } } //cout << x << " " << y << " " << sum << " " << b << " " << ret << "\n"; dp[x][y][sum]=make_pair(b,ret); return make_pair(b,ret); } int main() { cin >> n >> m; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin >> c[i][j]; if(c[i][j]=='M') y1=j; for(int k=0;k<=n;k++) dp[i][j][k]=make_pair(-1,"a"); } } cout << rek(n-1,y1,0).first << "\n" << rek(n-1,y1,0).second; return 0; }

Compilation message (stderr)

retro.cpp: In function 'std::pair<int, std::__cxx11::basic_string<char> > rek(int, int, int)':
retro.cpp:42:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(cnt>ret.size() or (cnt==ret.size() && s<ret)) {
      ~~~^~~~~~~~~~~
retro.cpp:42:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(cnt>ret.size() or (cnt==ret.size() && s<ret)) {
                         ~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...