UVA 10954 ADD all Commencel

来源:互联网 发布:淘宝客鹊桥计划好不好 编辑:程序博客网 时间:2024/05/18 04:00

这题昨晚感觉不知道为什么数组开成5000+多点会RE,最后尝试到8000多也还是RE了,题目要求是N=5000;

最后干脆开50000,AC。下面是代码

#include <map>#include <set>#include <list>#include <cmath>#include<cctype>#include <ctime>#include <deque>#include <stack>#include <queue>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define PI 3.1415926535897932626using namespace std;int gcd(int a, int b){return a % b == 0 ? b : gcd(b, a % b);}long long ans;int N;int a[5050];int front,rear;void insert(int x)//将新计算的和插入到原数组{    int i;    for ( i=front;i<=rear;i++)    if (a[i]>=x) break;    if (i==rear+1)        a[rear+1]=x;    else    {      for (int j=rear;j>=i;j--)      a[j+1]=a[j];      a[i]=x;    }}//不再辅助函数中更新front,rearvoid slove(){    ans=0;        front=0,rear=N-1;//对数组更新进行限制       while (front<rear)       {           ans+=a[front]+a[front+1];           insert(a[front]+a[front+1]);           front+=2;           rear++;       }       printf("%lld\n",ans);}int main(){    while (scanf("%d",&N)==1)    {        if (N==0) break;        for (int i=0;i<N;i++)            scanf("%d",&a[i]);        sort(a,a+N);        slove();    }    return 0;}


0 0
原创粉丝点击