为啥这只是一个角落案例失败?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/
Posted
技术标签:
【中文标题】为啥这只是一个角落案例失败?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/#c190148【英文标题】:Why is this failing for just a corner case? Question link-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/#c190148为什么这只是一个角落案例失败?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/#c190148 【发布时间】:2019-07-14 20:39:46 【问题描述】:为什么这只是一个角落案例失败?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/#c190148 对于所有其他情况,它运行良好。 我把除数数可能小于 4 的所有三种情况都做了。(素数、1 和素数的平方)
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(i=0;i<n;i++)
#define ll long long
#define elif else if
#define ff first
#define ss second
#define pii pair<ll int ll int>
#define mp make_pair
#define pb push_back
#define CLEAR(array, value) memset(ptr, value, sizeof(array));
#define si(a) scanf("%d", &a)
#define sl(a) scanf("%lld", &a)
#define pi(a) printf("%d", a)
#define pl(a) printf("%lld", a)
#define pn printf("\n")
#define int long long int
int32_t main()
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,x,t,i;
cin >> n;
int max=10000009;
int prime[max];
int j;
for(int i=2; i*i<=max; i++)
if (prime[i]==0)
for(j=i*i; j<=max; j+=i)
prime[j]=1;
rep(i,n)
cin >> x;
t=sqrt(x);
if (prime[x]==0)
cout << "NO" << endl;
else if ((t*t)==x && prime[t]==0)
cout << "NO" << endl;
else
cout << "YES" << endl;
【问题讨论】:
请提供您使用的实际输入、实际输出和预期输出的列表。否则很难理解你的意思是什么“极端情况”。 那些定义真的很混乱...:/ 我建议使用标准 C++ 并避免任何扩展,例如变长数组。 请不要重新定义语言关键字,如果你这样做,它甚至不应该编译。 @vandench 这是未定义的行为,所以标准允许编译器做任何事情。 【参考方案1】:这似乎是堆栈溢出。
您正在分配堆栈上的素数数组。
失败的测试用例的值 9999863 接近于素数数组的末尾。
如果您将该行移至基于非堆栈的分配,例如通过
static int prime[10000009];
然后所有测试通过。
【讨论】:
【参考方案2】:您应该将这两行移出main
函数并重命名max
变量,因为它会变得不明确。此外,max
变量应该是constant
,因为 ISO C++ 禁止变长数组:
int max=10000009;
int prime[max];
所以它应该是这样的
const int maximum=10000009;
int prime[maximum];
然后它通过所有测试用例。
不应该在main
中分配这么大的数组,除非你不增加堆栈大小或使用动态内存分配,否则你会得到堆栈溢出。 Here您可以阅读更多相关信息。
【讨论】:
以上是关于为啥这只是一个角落案例失败?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用案例类在 DataFrame 上映射失败并显示“无法找到存储在数据集中的类型的编码器”?