50 后5个re 求解

P5587 打字练习

从csdn中截取的 @[bupt_liunanfu](https://www.luogu.com.cn/user/1230109) > 数据错误:程序在运行过程中,数据输入或输出出现了异常,例如输入了无效的数据或输出数据超出了预期范围。这种情况下,操作系统可能向程序发送 "IOT trap" 信号,通知程序数据错误并终止其运行。
by Razer_System @ 2024-01-26 08:30:26


@[bupt_liunanfu](/user/1230109) ### 关于RE 你的代码里有对于字符串进行erase操作的语句`s1[i].erase(b-1,1);`,此时RE就要检查是不是存在越界访问。 ### 错误原因 输入数据: ``` a<b EOF b EOF 60 ``` 应该输出`1`,但是你的程序输出了`0`。 ------------ 错误在第17行和第36行,应当都为:`if(b-1>=0) //b!=0` ~~(byd查了10分钟才找到)~~
by Nail9 @ 2024-01-28 15:00:59


@[Nail9](/user/1121118) 难蚌 半夜敲糊涂了 自己现在看都觉得离谱
by bupt_liunanfu @ 2024-01-30 01:33:01


@[bupt_liunanfu](/user/1230109) 你还是改错了( AC: ```cpp #include<iostream> #include<string> #include<algorithm> using namespace std; const int N=10010; string s1[N]; string s2[N]; int main() { int i=0,j=0; int sum=0; while(getline(cin,s1[i]) && s1[i]!="EOF") { for(int b=0;b<(int)s1[i].length();b++) { if(s1[i][b]=='<') if(b-1>=0) { s1[i].erase(b,1); s1[i].erase(b-1,1); b-=2; } else { s1[i].erase(b,1); b--; } } i++; } while(getline(cin,s2[j]) && s2[j]!="EOF") { for(int b=0;b<(int)s2[j].length();b++) { if(s2[j][b]=='<') if(b-1>=0) { s2[j].erase(b,1); s2[j].erase(b-1,1); b-=2; } else { s2[j].erase(b,1); b--; } } j++; } int t; cin>>t; for(int l=0;l<min(i,j);l++) { int len=min(s1[l].length(),s2[l].length()); for(int r=0;r<len;r++) if(s1[l][r]==s2[l][r]) sum++; } double kmp; kmp=sum; kmp=kmp*60/t; sum=kmp; if(kmp-sum>=0.5) sum++; cout<<sum<<endl; return 0; } ```
by Nail9 @ 2024-01-30 09:31:16


|