RE原因
- 数组越界;
- 除以0;
- 非法内存读取;
- 系统栈过载,如数组开过大,数组最大 536870911,约5e8;
- 递归层次太深,系统栈满,或者无法跳出递归;
题目:ABC Tournament
大意:给定 2N位数,两两比对,选出较大的数字,直到剩下两位数字,输出较小的数字的位置(即输出在原来的 2N位数字中的第几位)
#includeusing namespace std; typedef long long ll; ll a[65550]; queue q; int main() { int n; scanf("%d",&n); int k=pow(2,n); for(int i=1;i<=k;i++) { scanf("%lld",&a[i]); if(i%2==0) { if(a[i]>a[i-1]) q.push(i); else q.push(i-1); } } if(n!=1) { while(q.size()>2) { int x=q.front(); q.pop(); int d=q.front(); q.pop(); if(a[x]>a[d]) { q.push(x); } else q.push(d); } int x=q.front(); q.pop(); int d=q.front(); if(a[x]>a[d]) { cout< a[2]) cout<<2< 下面:网上的找到题解,思路大概是相同的,但是用的工具不同,且全部数字和下标一起进去q,不会出现上面解法导致的错误。
#includeusing namespace std; typedef long long ll; typedef pair pli; int main() { queue q; //用pair不经过第一轮挑选将全部数据和下标一起录进queue int n; scanf("%d",&n); n=1< 2) { pli x=q.front(); q.pop(); pli y=q.front(); q.pop(); if(x



