rt 总是 WA 在 #8 一个点,具体表现在应该将数字在后缀之后输出但本人程序总在后缀名前(特判后可过证明就是这个问题)。代码有关部分:
bool nump;
int fst_num=0;
string name="",g1="",g2;
cin>>g2;
for(int i=0,p=0;i<st.size();i++){
if(st[i]=='.')p=1;
else if(st[i]>='0'&&st[i]<='9'){
nump=~p;
for(i--;st[i+1]>='0'&&st[i+1]<='9';i++)(fst_num*=10)+=st[i+1]-'0';
}
else{
if(p)g1+=st[i];
else name+=st[i];
}
}
for(n=0;cin>>ans[0][n]>>ans[1][n];n++){
lst[n].i=n;
for(int i=0,s1=0,p=1;i<ans[0][n].size();i++){
char ap=ans[0][n][i];
if(p==1&&!(ap>='0'&&ap<='9'||ap=='.'))s1++;
else{
if(p==1){
ans[0][n].erase(0,s1);
ans[0][n].insert(0,name);
i=name.size()-1;
p=0;
}
if(ap>='0'&&ap<='9'){
(lst[n].data*=10)+=ap-'0';
}
else if(ap=='.')p=2;
else{
if(p==2){
ans[0][n].erase(i);
ans[0][n].append(g1);
i=ans[0][n].size()-1;
}
}
}
}
for(int i=0,s1=0,p=1;i<ans[1][n].size();i++){
char ap=ans[1][n][i];
if(p==1&&!(ap>='0'&&ap<='9'||ap=='.'))s1++;
else{
if(p==1){
ans[1][n].erase(0,s1);
ans[1][n].insert(0,name);
i=name.size()-1;
p=0;
}
if(ap>='0'&&ap<='9'){
(lst[n].data*=10)+=ap-'0';
}
else if(ap=='.')p=2;
else{
if(p==2){
ans[1][n].erase(i);
ans[1][n].append(g2);
i=ans[1][n].size()-1;
}
}
}
}
}
sort(lst,lst+n,cmp);
for(int i=0;i<n;i++){
bool p=0;
int k=lst[i].i;
for(int j=0;j<ans[0][k].size();j++){
if(ans[0][k][j]>='0'&&ans[0][k][j]<='9'){
if(ans[0][k][j-1]<'0'||ans[0][k][j-1]>'9'){//将这个删了就能对 #8
cout<<i+fst_num;
p=1;
}
}
else cout<<ans[0][k][j];
}
if(p)p=0;
else cout<<i+fst_num;
cout<<' ';
for(int j=0;j<ans[1][k].size();j++){
if(ans[1][k][j]>='0'&&ans[1][k][j]<='9'){
if(ans[1][k][j-1]<'0'||ans[1][k][j-1]>'9'){//将这个删了就能对 #8
cout<<i+fst_num;
p=1;
}
}
else cout<<ans[1][k][j];
}
if(!p)cout<<i+fst_num;
cout<<'\n';
}