111 条题解
-
0td650739 LV 8 @ 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. -
02012-11-02 10:50:00@
超详细题解传送门:
http://user.qzone.qq.com/1304445713/blog/1350649058不设访问权限,没有动画,没有音乐,很整洁就一个博客而已!
-
02012-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了…… -
02012-08-10 21:00:58@
注意题目中有一行“输入保证最优解唯一”
因此考虑贪心法:选择交头接耳人数最多的过道
程序实时处理交头接耳的人,判断他们“横跨”第几行/第几列,给相应的行/列交头接耳人数+1
然后选出人最多的行列(可以放心这么做否则解就是不唯一的矛盾),排序后输出即可
使用C++的可以考虑pair类型简化程序(first储存人数,second储存行号/列号),因为pair类型的比较优先比较first值 -
02010-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 -
02010-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 -
02010-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. -
02009-11-18 19:00:15@
想当初因为输出排序的问题与一等失之交臂,这道害人的水题
-
02009-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 -
02009-11-10 17:05:38@
大家记住了 输出一定要排序啊
我第一次没排 结果就得了10分 第二次才AC
程序就不晒了吧 就是要仔细 -
02009-11-09 00:27:22@
好恶心的输出。
害的我4次才AC -
02009-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. -
02009-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 -
02009-10-25 11:16:59@
话说结果是全部升序输出...
不是先按隔开数目降序,再按行列号升序...
我就是这么被这道水题WS了... -
02009-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水题哈
-
02009-10-20 11:04:08@
水水的贪心。。
读入,直接判断累加。
排序输出即可。 -
02009-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 -
02009-10-11 11:46:51@
哎 考试时候题目看错了~
-
02009-10-10 14:05:32@
突然发现一个人只能和前后左右交谈,囧
一开始不知道怎么做,突然发现很水!!!
不过在学校机房效率太低,用了库函数快排还写了50多行 -
02009-10-09 22:24:24@
秒杀,统计+快排