Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:同样的代码。C++提交就AC,G++提交就WA。非常恶心In Reply To:同样的代码。C++提交就AC,G++提交就WA。非常恶心 Posted by:edwardyhy1 at 2018-12-23 07:07:15 > 同样的代码。C++提交就AC,G++提交就WA > > #include <iostream> > #include <fstream> > #include <string> > #include <cstdlib> > #include <cstring> > using namespace std; > > const int MaxN = 101; > > void print_brackets(char s[], int f[][MaxN], int i, int j) { > if (i>j) return; > if (i==j) > { > if (s[j]=='(' || s[j]==')') > printf("()"); > else > printf("[]"); > } > else > { // i<j > if (f[i][j]==f[i+1][j-1] && > ((s[i]=='(' && s[j]==')') || (s[i]=='[' && s[j]==']'))) > { > printf("%c", s[i]); > print_brackets(s, f, i+1, j-1); > printf("%c", s[j]); > } > else > { > for (int k=i; k<j; ++k) > if (f[i][k] + f[k+1][j] == f[i][j]) > { > print_brackets(s, f, i, k); > print_brackets(s, f, k+1, j); > break; > } > } > } > } > > int main() { > char s[MaxN]; > int f[MaxN][MaxN]; > int i,j,k,d; > scanf("%s", s); > memset(f, 0x7fff, sizeof(f)); > int n = strlen(s); > if(n == 0) > { > printf("\n"); > return 0; > } > for (i=0; i<n; ++i) { > f[i][i] = 1; // for every character, we need one more to match it > f[i+1][i] = 0; > } > for (d=1; d<n; ++d) // match s[i]...s[j], d=j-i > { > for (i=0; i<n-d; ++i) > { > j = i+d; > f[i][j] = f[i][j-1] + 1; > if ((s[i]=='(' && s[j]==')') || (s[i]=='[' && s[j]==']')) > if (f[i+1][j-1] < f[i][j]) > f[i][j] = f[i+1][j-1]; > for (k=i; k<j; ++k) > if (f[i][k] + f[k+1][j] < f[i][j]) > f[i][j] = f[i][k] + f[k+1][j]; > } > } > print_brackets(s, f, 0, n-1); > printf("\n"); > } 我的代码C++没过,改成G++过了。。 #include <stdio.h> #include <cstring> #include <map> #include <string> const int INF=0x3f3f3f3f; char ans[105][105][205]; int main() { std::map<int,int> mp; mp['(']=1,mp[')']=4,mp['[']=0,mp[']']=3; int dp[105][105]={0}; char s[105]; scanf("%s",s+1); int n=strlen(s+1); for(int i=1;i <= n;i++) { dp[i][i]=1; if(s[i] == '(' || s[i] == ')') strcpy(ans[i][i],"()"); else strcpy(ans[i][i],"[]"); } for(int i=1;i<n;i++) for(int j=1;i+j <= n;j++) { if(mp[s[i+j]]-mp[s[j]] == 3) { dp[j][i+j]=dp[j+1][i+j-1]; if(mp[s[j]] == 1) { ans[j][i+j][0]='('; strcat(ans[j][i+j],ans[j+1][i+j-1]); strcat(ans[j][i+j],")"); } else { ans[j][i+j][0]='['; strcat(ans[j][i+j],ans[j+1][i+j-1]); strcat(ans[j][i+j],"]"); } } else dp[j][i+j]=INF; for(int k=j;k<i+j;k++) if(dp[j][k]+dp[k+1][i+j]<dp[j][i+j]) { dp[j][i+j]=dp[j][k]+dp[k+1][i+j]; strcpy(ans[j][i+j],ans[j][k]); strcat(ans[j][i+j],ans[k+1][i+j]); } } printf("%s\n",ans[1][n]); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator