题解

111 条题解

  • 0
    @ 2013-08-06 11:41:36

    一遍AC!爽!!!!
    附上代码O(∩_∩)O~
    Type arrtype=record
    num:longint;
    no:longint;
    End;
    Var m,n,k,l,d,i,j:longint;
    a,b:array[1..2000] of arrtype;
    h:array[1..2000] of longint;
    Function min(a,b:longint):longint;
    Begin
    If a<b then exit(a) else exit(b);
    End;
    Procedure qsorta(l,r:longint);
    Var i,j,x,y:longint;
    Begin
    i:=l; j:=r;
    x:=a[(l+r) shr 1].num;
    Repeat
    while x<a[i].num do inc(i);
    while x>a[j].num do dec(j);
    if i<=j then
    begin
    y:=a[i].num; a[i].num:=a[j].num; a[j].num:=y;
    y:=a[i].no; a[i].no:=a[j].no; a[j].no:=y;
    inc(i); dec(j);
    End;
    Until i>j;
    If i<r then qsorta(i,r);
    If j>l then qsorta(l,j);
    End;
    Procedure qsortb(l,r:longint);
    Var i,j,x,y:longint;
    Begin
    i:=l; j:=r;
    x:=b[(l+r) shr 1].num;
    Repeat
    while x<b[i].num do inc(i);
    while x>b[j].num do dec(j);
    if i<=j then
    begin
    y:=b[i].num; b[i].num:=b[j].num; b[j].num:=y;
    y:=b[i].no; b[i].no:=b[j].no; b[j].no:=y;
    inc(i); dec(j);
    End;
    Until i>j;
    If i<r then qsortb(i,r);
    If j>l then qsortb(l,j);
    End;
    Procedure init;
    Var x,y,p,q,i:longint;
    Begin
    Readln(m,n,k,l,d);
    For i:=1 to n do a[i].no:=i;
    For i:=1 to m do b[i].no:=i;
    For i:=1 to d do
    Begin
    Readln(x,y,p,q);
    If x=p then inc(b[min(y,q)].num);
    If y=q then inc(a[min(x,p)].num);
    End;
    qsorta(1,n);
    qsortb(1,m);
    For i:=1 to k do
    Begin
    If a[i].num=maxlongint then break;
    inc(h[a[i].no]);
    End;
    For i:=1 to 2000 do if h[i]>0 then write(i,' ');
    Writeln;
    Fillchar(h,sizeof(h),0);
    For i:=1 to l do
    Begin
    If b[i].num=maxlongint then break;
    inc(h[b[i].no]);
    End;
    For i:=1 to 2000 do If h[i]>0 then write(i,' ');
    End;
    Begin
    Init;
    Readln;
    End.

  • 0
    @ 2012-11-02 10:50:00

    超详细题解传送门:

    http://user.qzone.qq.com/1304445713/blog/1350649058

    不设访问权限,没有动画,没有音乐,很整洁就一个博客而已!

  • 0
    @ 2012-10-28 11:41:18

    编译通过...

    ├ 测试数据 01:答案正确... (0ms, 600KB)

    ├ 测试数据 02:答案正确... (0ms, 600KB)

    ├ 测试数据 03:答案正确... (0ms, 600KB)

    ├ 测试数据 04:答案正确... (0ms, 600KB)

    ├ 测试数据 05:答案正确... (0ms, 600KB)

    ├ 测试数据 06:答案正确... (0ms, 600KB)

    ├ 测试数据 07:答案正确... (0ms, 600KB)

    ├ 测试数据 08:答案正确... (0ms, 600KB)

    ├ 测试数据 09:答案正确... (0ms, 600KB)

    ├ 测试数据 10:答案正确... (0ms, 600KB)

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

    Accepted / 100 / 0ms / 600KB

    写了两个快排结果堆栈溢出

    把最后排序输出改成冒泡就AC了……

  • 0
    @ 2012-08-10 21:00:58

    注意题目中有一行“输入保证最优解唯一”

    因此考虑贪心法:选择交头接耳人数最多的过道

    程序实时处理交头接耳的人,判断他们“横跨”第几行/第几列,给相应的行/列交头接耳人数+1

    然后选出人最多的行列(可以放心这么做否则解就是不唯一的矛盾),排序后输出即可

    使用C++的可以考虑pair类型简化程序(first储存人数,second储存行号/列号),因为pair类型的比较优先比较first值

  • 0
    @ 2010-07-22 15:46:30

    program ex1;

    var flag,m,n,k,l,d,i,j,x,y,x1,y1:longint;

    tmp,col,row:array[1..1000]of longint;

    function min(a,b:longint):longint;

    begin

    if a

  • 0
    @ 2010-06-30 23:01:03

    #include

    using namespace std;

    const int MAXN=1001;

    int m,n,k,l,d;

    struct Node

    {

    int h,s;

    }h[MAXN],z[MAXN];

    int cmp1(const void *a,const void *b)

    {

    struct Node *m=(struct Node *)a;

    struct Node *n=(struct Node *)b;

    if (m->ss)return 1;

    else return -1;

    }

    int cmp2(const void *a,const void *b)

    {

    struct Node *m=(struct Node *)a;

    struct Node *n=(struct Node *)b;

    if (m->h>n->h)return 1;

    else return -1;

    }

    int p_d(int x1,int y1,int x2,int y2)

    {

    if (x1==x2)h[(y1+y2)/2].s++;

    else z[(x1+x2)/2].s++;

    }

    void read()

    {

    cin>>m>>n>>k>>l>>d;

    for (int i=1;i>x1>>y1>>x2>>y2;

    p_d(x1,y1,x2,y2);

    }

    for (int i=1;i

  • 0
    @ 2010-03-07 13:44:12

    var

    m,n,k,l,d,i,j,x1,x2,y1,y2,a2,b2,v:longint;

    a,b,a1,b1:array[1..10000]of integer; f:boolean;

    begin

    readln(m,n,k,l,d); a2:=0; b2:=0;

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

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

    for i:=1 to d do

    begin

    readln(x1,y1,x2,y2);

    if x1=x2 then

    begin

    f:=true; if y1>y2 then y1:=y2;

    for j:=1 to b2 do if b[j]=y1 then begin f:=false; v:=j; break; end;

    if f=true then begin inc(b2); b[b2]:=y1;{sz} inc(b1[b2]);{gs} end

    else inc(b1[v]);

    end

    else if y1=y2 then

    begin

    f:=true; if x1>x2 then x1:=x2;

    for j:=1 to a2 do if a[j]=x1 then begin f:=false; v:=j; break; end;

    if f=true then begin inc(a2); a[a2]:=x1; inc(a1[a2]); end

    else inc(a1[v]);

    end;

    end;

    for i:=1 to a2-1 do

    for j:=i+1 to a2 do

    if a1[i]b[j] then begin v:=b[i]; b[i]:=b[j]; b[j]:=v; end;

    for j:=1 to l do

    write(b[j],' '); writeln;

    end.

  • 0
    @ 2009-11-18 19:00:15

    想当初因为输出排序的问题与一等失之交臂,这道害人的水题

  • 0
    @ 2009-11-15 22:25:33

    VJ复活后的第一题,值得庆祝

    program p1498;

    type e=record

    data,xh:longint;

    end;

    g=array[1..1000] of e;

    var x,y:g;

    x1,x2,y1,y2,m,n,k,l,d,i:longint;

    procedure init;

    var i:longint;

    begin

    readln(m,n,k,l,d);

    fillchar(x,sizeof(x),0); fillchar(y,sizeof(y),0);

    while not(eof) do

    begin

    readln(x1,y1,x2,y2);

    if x1=x2 then

    begin inc(y[(y1+y2) div 2].data); y[(y1+y2) div 2].xh:=(y1+y2) div 2; end;

    if y1=y2 then

    begin inc(x[(x1+x2) div 2].data); x[(x1+x2) div 2].xh:=(x1+x2) div 2; end;

    end;

    end;

    procedure swap(var a:g;i,j:longint);

    var tmp:longint;

    begin

    tmp:=a[i].data; a[i].data:=a[j].data; a[j].data:=tmp;

    tmp:=a[i].xh; a[i].xh:=a[j].xh; a[j].xh:=tmp;

    end;

    procedure qsort(var a:g;l,r:longint);

    var i,j,t:longint;

    begin

    i:=l; j:=r; t:=a[random(r-l)+l].data;

    repeat

    while a[j].datat do inc(i);

    if j>=i then begin swap(a,i,j); inc(i); dec(j); end;

    until i>j;

    if l

  • 0
    @ 2009-11-10 17:05:38

    大家记住了 输出一定要排序啊

    我第一次没排 结果就得了10分 第二次才AC

    程序就不晒了吧 就是要仔细

  • 0
    @ 2009-11-09 00:27:22

    好恶心的输出。

    害的我4次才AC

  • 0
    @ 2009-11-01 16:50:17

    program p1498;

    var a:array[1..1000,1..1000] of integer;

    b,c:array[1..1000] of integer;

    bi,ci:integer;

    m,n,k,l,d:integer;

    x,y,p,q:integer;

    i,u,e:integer;

    begin

    read(m,n,k,l,d);

    bi:=0;ci:=0;

    for i:=1 to m do

    for u:=1 to n do

    a:=0;

    readln;

    for i:=1 to d do

    begin

    read(x,y,p,q);

    a[x,y]:=1; a[p,q]:=1;

    readln;

    end;

    for i:=1 to m do b[i]:=0;

    for u:=1 to n do c:=0;

    for i:=1 to m do

    for u:=1 to n do

    begin

    if (a=1) and (a=1) then b:=b+1;

    if (a=1) and (a=1) then c:=c+1;

    end;

    for u:=1 to k do

    begin

    for i:=1 to m do

    if b[i]>bi then bi:=b[i];

    write(bi,' ');

    for i:=m downto 1 do if b[i]=bi then begin b[i]:=0; break; end;

    bi:=0;

    end;

    writeln;

    for u:=1 to l do

    begin

    for i:=1 to n do

    if c[i]>ci then ci:=c[i];

    write(ci,' ');

    for i:=n downto 1 do if c[i]=ci then begin c[i]:=0; break; end;

    ci:=0;

    end;

    end.

  • 0
    @ 2009-10-28 13:15:03

    贪心题, 考试的时候竟然没想出来就弱弱的随便写了个教,还混了几分哈哈。

    AC了..

    编译通过...

    ├ 测试数据 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-25 11:16:59

    话说结果是全部升序输出...

    不是先按隔开数目降序,再按行列号升序...

    我就是这么被这道水题WS了...

  • 0
    @ 2009-10-20 17:53:44

    编译通过...

    ├ 测试数据 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-20 11:04:08

    水水的贪心。。

    读入,直接判断累加。

    排序输出即可。

  • 0
    @ 2009-10-18 21:00:57

    program p1498(input,output);

    type

    ZL=array[1..1000]of integer;

    var

    m,n,k,l,d,i,x,y,p,q:integer;

    mm,nn,a:ZL;

    function compare(a,b:integer):integer;

    begin

    if amax then begin max:=dd[j];f:=j;end;

    inc(r); cc[r]:=f; dd[f]:=0;

    end;

    for i:=1 to r-1 do

    for j:=r-1 downto i do

    if cc[j]>cc[j+1] then begin o:=cc[j];cc[j]:=cc[j+1];cc[j+1]:=o;end;

    write(cc[1]);

    for i:=2 to r do

    write(' ',cc[i]);

    writeln;

    end;

    begin

    readln(m,n,k,l,d);

    fillchar(mm,sizeof(mm),0);

    fillchar(nn,sizeof(nn),0);

    for i:=1 to d do

    begin

    readln(x,y,p,q);

    if x=p then inc(mm[compare(y,q)])

    else inc(nn[compare(x,p)]);

    end;

    printf(k,nn);

    printf(l,mm);

    end.

    最后输出时要按从小到大的顺序

    提交了4次才AC

  • 0
    @ 2009-10-11 11:46:51

    哎 考试时候题目看错了~

  • 0
    @ 2009-10-10 14:05:32

    突然发现一个人只能和前后左右交谈,囧

    一开始不知道怎么做,突然发现很水!!!

    不过在学校机房效率太低,用了库函数快排还写了50多行

  • 0
    @ 2009-10-09 22:24:24

    秒杀,统计+快排

信息

ID
1498
难度
5
分类
贪心 点击显示
标签
递交数
4079
已通过
1539
通过率
38%
被复制
20
上传者