提问:这,我没超时啊?
本帖最后由 高山 于 2022-10-4 11:22 编辑我用c++编了个程序,结果说超时
题目如下:
高桥做了一道信息题。做的过程中他提交了n次,评测结果有AC WA TLE RE 。输入他这n次提交的结果,请你帮他算一算:每种评测结果各出现了多少次?
样例输入及输出:
6
AC
TLE
AC
AC
WA
TLEAC x 3
WA x 1
TLE x 2
RE x 0我的代码是:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n,AC=0,WA=0,TLE=0,RE=0;
cin>>n;
string at;
for(int i=0;i<n;i++)
{
cin>>at;
}
for(int i=0;i<n;i++)
{
if(at=="AC") AC++;
if(at=="WA") WA++;
if(at=="TLE") TLE++;
if(at=="RE") RE++;
}
cout<<"AC x "<<AC<<endl;
cout<<"WA x "<<WA<<endl;
cout<<"TLE x "<<TLE<<endl;
cout<<"RE x "<<RE<<endl;
return 0;
}
结果说超时:
但我看c++编译器上写没超过限定时间
限定时间:2秒
我感觉string at不是申请999个string类型的变量,而是申请一个长度为999的string变量,所以有可能溢出(溢出好像也是会RE的)
这个是我的代码,AC了
#include<iostream>
#include<cstring>
using namespace std;
int main() {
int n, ac, wa, tle, re;
ac = wa = tle = re = 0;
cin>>n;
for(int i=0; i<n; ++i) {
string x; cin>>x;
if(x == "AC") ac++;
if(x == "WA") wa++;
if(x == "TLE") tle++;
if(x == "RE") re++;
}
cout<<"AC x "<<ac<<endl;
cout<<"WA x "<<wa<<endl;
cout<<"TLE x "<<tle<<endl;
cout<<"RE x "<<re<<endl;
return 0;
} 本帖最后由 高山 于 2022-10-4 11:33 编辑
点此
测试链接:https://atcoder.jp/contests/abc173/tasks/abc173_b
测试提交链接:https://atcoder.jp/contests/abc173/submit?taskScreenName=abc173_b
@zhangjinxuan 本帖最后由 zhangjinxuan 于 2022-10-8 19:19 编辑
注意N的数据范围:1 ≤ N ≤ 10 ^ 5
你的string数组只开999,10的五次方能装得下就怪了
解决方案:
string at; //我喜欢用1...base,所以开100001
其实完全没有必要开一个string数组,可以这样子:
#include <cstdio>
using namespace std;
int ac, wa, tle,re;
int main() {
char s;
int n;
scanf("%d", &n);
while (n--) {
scanf("%s", s);
switch (s) {
case 'A':
++ac;
break;
case 'W':
++wa;
break;
case 'T':
++tle;
break;
case 'R':
++re;
break;
}
}
printf("AC x %d\nWA x %d\nTLE x %d\nRE x %d", as, wa, tle, re);
}
另外,RE是运行时错误,意思是运行时发生了一些很奇怪的错误,常见的错误有:栈溢出,访问不能读写的内存(数组溢出),除零,缓冲区溢出,assert失败等等
TLE才是超时哦
@高山 我认为这才是正解 tommyyu 发表于 2022-10-4 11:21
我感觉string at不是申请999个string类型的变量,而是申请一个长度为999的string变量,所以有可能溢出 ...
不对不对,string at就是999个string变量
你想一想,n的数据范围在100000以下,at肯定会访问非法内存
溢出的原因不是长度不够,而是数组空间不够
楼上有详细一点的讲解 本帖最后由 zhangjinxuan 于 2022-10-7 12:23 编辑
还有,楼主,自己没有超时不代表不会超时哦,样例数据可是不能和真正测试数据比较的
多刷刷OJ吧,涨涨经验,我们学C++就是为了刷OJ,打竞赛的
我还发现我和高山的代码风格完全不一样{:5_109:} 本帖最后由 陈尚涵 于 2022-10-7 16:22 编辑
哪个OJ给2秒时间?这么长吗?赞同楼上,要经常刷OJ,lz不要刷奇奇怪怪的网站了,推荐洛谷、力扣,我学C++主要是兴趣,但也要打竞赛。 陈尚涵 发表于 2022-10-7 16:21
哪个OJ给2秒时间?这么长吗?赞同楼上,要经常刷OJ,lz不要刷奇奇怪怪的网站了,推荐洛谷、力扣,我学C++主 ...
这是Atcoder,日本的比赛,老师推荐我们去刷,我也经常刷。
至于为什么是2秒....我也无法解答 zhangjinxuan 发表于 2022-10-8 19:18
这是Atcoder,日本的比赛,老师推荐我们去刷,我也经常刷。
至于为什么是2秒....我也无法解答
额没见过这个网站 陈尚涵 发表于 2022-10-8 19:43
额没见过这个网站
beeeeeeeeeeeeeeep
页:
[1]