题解

535 条题解

  • 0
    @ 2009-10-08 12:23:38

    堆~~~

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-10-05 19:04:54
  • 0
    @ 2009-10-05 08:47:10

    此题有类似DP的利用桶排的O(n)算法~而且思路简单,易懂

  • 0
    @ 2009-09-22 16:59:46

    什么快排、堆排,我就用冒泡!

    冒泡最稳定!冒泡最好写!而且O(N方)在绝大多数情况下都能接受

    为什么基础算法就受歧视呢??

  • 0
    @ 2009-09-21 17:23:52

    编译通过...

    ├ 测试数据 01:答案正确... 541ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 72ms

    ├ 测试数据 07:答案正确... 338ms

    ├ 测试数据 08:答案正确... 556ms

    ├ 测试数据 09:答案正确... 338ms

    ├ 测试数据 10:答案正确... 541ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:2386ms

    快排+插排。。。。。。

    但为什么我在本机上一直无输出。。。

    结果,我晾了它2天就AC了呢?。。。

  • 0
    @ 2009-09-19 16:15:07

    dp

  • 0
    @ 2009-09-18 18:19:08

    1097解题报告 步步都要说明 可读性超高的程序

    尽在

    http://wwzhwdwd.blog.163.com/blog/static/128151450200981854734255

  • 0
    @ 2009-09-17 20:14:53

    第一次提交fillchar放在了读入后面结果一堆0 WA掉了。。。。。。

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    var

    a,b:array[1..20000]of longint;

    n:integer;

    ans:longint;

    procedure init;

    var

    i:integer;

    begin

    fillchar(a,sizeof(a),0);

    fillchar(b,sizeof(b),0);

    readln(n);

    for i:=1 to n do read(a[i]);

    readln;

    end;

    procedure qsort(l,r:integer);

    var

    i,j:integer;

    temp:longint;

    x:longint;

    begin

    x:=a[(l+r)shr 1];

    i:=l;

    j:=r;

    repeat

    while a[i]x do dec(j);

    if ij;

    if l

  • 0
    @ 2009-09-17 18:47:26

    var

    a:array[0..10000] of longint;

    total,temp:longint;

    sss,n,i,j,t:longint;

    procedure kuaipai(s,t:longint);

    var

    i,j,x,t1:longint;

    begin

    i:=s;

    j:=t;

    x:=a[i];

    repeat

    while (a[j]i) do j:=j-1;

    if j>i then

    begin

    t1:=a[i];

    a[i]:=a[j];

    a[j]:=t1;

    end;

    while (a[i]>=x) and (i

  • 0
    @ 2009-09-16 18:45:51

    呜啊呜啊喔,.....死给哦

  • 0
    @ 2009-09-07 23:03:50

    从来都只会堆排、、、、

    快排用都没用过、、用也不会用、、啊萎哉、、

  • 0
    @ 2009-09-07 19:47:21

    program guozi;

    var a:array[1..10002] of longint;

    temp,n,i,j,k,s,t:longint;

    procedure heap (s,n:longint);

    var i,j,k:longint;

    begin

    while jmaxint do begin

    i:=a; j:=maxint;

    if s*2

  • 0
    @ 2009-09-07 19:30:58

    分析:本题练习堆排序

    从题中可以很清楚的发现,要是花费体力最小,则每次要将最小的2堆合并,即使得大堆搬运的次数最少。所以堆可以很好的实现这个要求,每次从小根堆中取堆顶元素,就能得到当前最小堆,然后将运算结果存入堆中,继续计算。

    步骤:

    1. 输入数据

    2. 初始化堆,从n div 2到1进行调整堆。建立一个小根堆。

    3. 重复以下步骤,直至n=1,即堆中不超过1个元素了。取堆顶h[1]元素存入a,将堆尾h[n]元素调到堆顶,调整堆;再取堆顶元素存入b,运算c=a+b。并将c存入堆顶h[1],并将节点数减一。即dec(n)减少无效运算。

  • 0
    @ 2009-09-04 22:06:26

    双列队 秒杀

    var

    n,i,j,k,ha,hb,ta,tb,x,y:longint;

    a,b:packed array[1..10001]of longint;

    z:longint;

    procedure sort(l,r:integer);

    var

    i,j,x,y:integer;

    begin

    i:=l;j:=r;

    x:=a[(l+r) shr 1];

    repeat

    begin

    while a[i]x do dec(j);

    if ij;

    if l

  • 0
    @ 2009-08-28 16:47:11

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    本题洪水啊!!!

  • 0
    @ 2009-08-20 19:56:07

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var n,i,j,t:longint;

    a:Array[0..10000] of int64;

    sum,ss,k:int64;

    pan:boolean;

    function min(s,t:longint):longint;

    begin

    min:=s;

    if a[t]

  • 0
    @ 2009-08-18 15:52:07

    编译通过...

    ├ 测试数据 01:答案正确... 259ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 9ms

    ├ 测试数据 07:答案正确... 150ms

    ├ 测试数据 08:答案正确... 228ms

    ├ 测试数据 09:答案正确... 150ms

    ├ 测试数据 10:答案正确... 259ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:1055ms

    先快排,后插入,能AC我已经很欣慰了……

  • 0
    @ 2009-08-17 08:57:42

    找最小值用堆维护就行了

    复杂度是nlogn

  • 0
    @ 2009-08-16 20:02:44

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    秒了

    但是打错个字母

    交了好几遍。。。 。。。

    堆排

    var n,i,j,t:longint;

    a:Array[0..10000] of int64;

    sum,ss,k:int64;

    pan:boolean;

    function min(s,t:longint):longint;

    begin

    min:=s;

    if a[t]

  • 0
    @ 2009-08-19 16:36:47

    ...无聊的要死。。拿来练手了。。。

    Treap:

    #include

    #include

    using namespace std;

    const bool Right=true,Left=false;

    const int inf=~0U>>1;

    struct Node

    {

    int x,pri,num;

    Node* C[2];

    Node(int t,int p,int n,Node* c0,Node* c1)

    :x(t),pri(p),num(n){C[0]=c0;C[1]=c1;}

    }TNull(-1,inf,0,NULL,NULL);

    typedef Node* Tree;

    Tree Null=&TNull;

    struct Treap

    {

    Tree root;

    void init()

    {

    root= new Node(inf,-1,1,Null,Null);

    }

    Tree Ratote(Tree& a,bool Direct)

    {

    Tree x=a->C[Direct];

    a->C[Direct]=x->C[!Direct];

    x->C[!Direct]=a;

    a=x;

    }

    void Insert(int x,Tree& a)

    {

    if(a==Null)

    {

    a=new Node(x,rand(),1,Null,Null);

    return;

    }

    if(x==a->x)

    {a->num++;return;};

    bool Direct=x > a->x;

    Insert(x,a->C[Direct]);

    if (a->pri > a->C[Direct]->pri)

    Ratote(a,Direct);

    }

    Tree& Search(int x,Tree a)

    {

    if(a->x==x||a==Null) return a;

    return Search(x,a->C[x > a->x]);

    }

    bool Exist(int x,Tree a)

    {

    if(a->x==x||a==Null) return a->x==x;

    return Exist(x,a->C[x > a->x]);

    }

    void Del(int x,Tree& t)

    {

    if(t!=Null)

    {

    if(t->x!=x) Del(x,t->C[x > t->x]);

    else

    if(t->num>1) {t->num--;return;}

    else

    if(t->C[Left]==Null&&t->C[Right]==Null)

    {

    delete t;

    t=Null;

    return;

    }

    else

    {

    bool direct = t->C[Right]->pri < t->C[Left]->pri;

    Ratote(t,direct);

    Del(x,t->C[!direct]);

    }

    }

    }

    int DelMin()

    {

    Tree t=root;

    while(t->C[Left]!=Null)

    t=t->C[Left];

    int x=t->x;

    Del(x,root);

    return x;

    }

    };

    int main()

    {

    srand(199581);

    Treap T;

    T.init();

    int n,k;

    cin>>n;

    for(int i=0;i>k;

    T.Insert(k,T.root);

    }

    int a,b;

    long long sum=0;

    for(int i=1;ivalnext;

    else

    {

    Last[lv--]=p;

    p=p->down;

    }

    };

    return Last[1]->val;

    }

    void insert(int v)

    {

    if (v==search(v))

    {

    Last[1]->num++;return;

    }

    int h=Lev();

    node* p,* q;

    q=NULL;

    for(int i=1;inext,q);

    Last[i]->next->pre=p;

    Last[i]->next=p;

    q=p;

    }

    }

    void Delete(int v)

    {

    if (v!=search(v))

    {cout1)

    {Last[1]->num--;return;};

    for(int i=1;ival!=v) break;

    Last[i]->pre->next=Last[i]->next;

    Last[i]->next->pre=Last[i]->pre;

    delete Last[i];

    }

    }

    int GetMin()

    {

    int t=Head[1]->next->val;

    Delete(t);

    return t;

    }

    int N=0;

    int main()

    {

    srand(199581);

    init();

    int n,k;cin>>n;

    for(int i=0;i>k;

    insert(k);

    }

    int a,b;

    long long sum=0;

    for(int i=1;i

信息

ID
1097
难度
6
分类
贪心 点击显示
标签
递交数
23906
已通过
6330
通过率
26%
被复制
41
上传者