535 条题解
-
0qiaomingda LV 8 @ 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 -
02009-10-05 19:04:54@
-
02009-10-05 08:47:10@
此题有类似DP的利用桶排的O(n)算法~而且思路简单,易懂
-
02009-09-22 16:59:46@
什么快排、堆排,我就用冒泡!
冒泡最稳定!冒泡最好写!而且O(N方)在绝大多数情况下都能接受
为什么基础算法就受歧视呢?? -
02009-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了呢?。。。 -
02009-09-19 16:15:07@
dp
-
02009-09-18 18:19:08@
1097解题报告 步步都要说明 可读性超高的程序
尽在
http://wwzhwdwd.blog.163.com/blog/static/128151450200981854734255 -
02009-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:答案正确... 0msvar
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 -
02009-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 -
02009-09-16 18:45:51@
呜啊呜啊喔,.....死给哦
-
02009-09-07 23:03:50@
从来都只会堆排、、、、
快排用都没用过、、用也不会用、、啊萎哉、、 -
02009-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 -
02009-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)减少无效运算。 -
02009-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 -
02009-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
本题洪水啊!!! -
02009-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 有效耗时:0msvar 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] -
02009-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我已经很欣慰了……
-
02009-08-17 08:57:42@
找最小值用堆维护就行了
复杂度是nlogn -
02009-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] -
02009-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