uva 1610 - Party Games(细节上的处置是关键,思路比较简单)
uva 1610 - Party Games(细节上的处理是关键,思路比较简单)
下面的代码是按照不同情况条理来分析的,不需要多解释,细心点就可以看懂。
细节问题出了错,要稳下心来仔细读代码,去找可能存在的bug,不要轻易放弃,更不要乱改把代码搞乱。如果思路太乱,就考虑重新分析重写。
#include<cstring> #include<iostream> #include<string> #include<algorithm> //#include<cstdio> using namespace std; const int maxn = 1010; string s[maxn]; void work(int a1,int a2) { char ans[100]; int len1=s[a1].size(); int len2=s[a2].size(); if(len1<len2) { int t=0; for(int i=0;i<len1;i++) { if(i==len1-1) {ans[t++]=s[a1][i];break;}//刚开始忽略 if(s[a1][i]==s[a2][i]) ans[t++]=s[a1][i]; if(s[a1][i]!=s[a2][i]) { ans[t++]=s[a1][i]+1; break; } } for(int i=0;i<t;i++) cout<<ans[i]; } else { int t=0; for(int i=0;i<len2;i++) { if(s[a1][i]==s[a2][i]) ans[t++]=s[a1][i]; if(s[a1][i]!=s[a2][i]) { if(i!=len2-1) { ans[t++]=s[a1][i]+1; break; } else { if(i==len1-1)//刚开始忽略 { ans[t++]=s[a1][i]; break; } char ch1=s[a1][i]+1; if(s[a2][i]!=ch1) { ans[t++]=ch1; break; } else { ans[t++]=s[a1][i]; for(int j=i+1;j<len1;j++) { if(j==len1-1)//刚开始忽略 { ans[t++]=s[a1][j]; break; } if(s[a1][j]!='Z') { ans[t++]=s[a1][j]+1; break; } else ans[t++]=s[a1][j]; } for(int k=0;k<t;k++) cout<<ans[k]; return; } } } } for(int i=0;i<t;i++) cout<<ans[i]; return; } } int main() { int n; while(cin>>n) { if(n==0) break; for(int i=0;i<n;i++) { cin>>s[i]; } sort(s,s+n); int a1=(n-1)/2; int a2=a1+1; char ss[100]; work(a1,a2); cout<<endl; } return 0; }
由错误的点来看,整体上的思路还是清晰正确的,末端边界其实考虑考虑到了但是忘了判断,导致出错。
仔细读代码,越来越感觉思路清晰很重要,而不是狂改特判的能力。