111 条题解
-
2xitele LV 7 @ 2017-04-08 10:11:12
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
struct s
{
int num;
int id;
bool operator<(const s &a) const
{
return num>a.num;
}
}xk[1005],yk[1005];
int m,n,k,l,d;
int x,y,p,q,i,w;
int an1[1005],an2[1005];
int main()
{
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
for(i=1;i<=d;i++)
{
scanf("%d%d%d%d",&x,&y,&p,&q);
if(x==p)
{
w=min(y,q);
yk[w].num++;
yk[w].id=w;
}
else
{
w=min(x,p);
xk[w].num++;
xk[w].id=w;
}
}
sort(xk+1,xk+m+1);
sort(yk+1,yk+n+1);
for(i=1;i<=k;i++) an1[i]=xk[i].id;
for(i=1;i<=l;i++) an2[i]=yk[i].id;
sort(an1+1,an1+k+1);
sort(an2+1,an2+l+1);
for(i=1;i<=k;i++) printf("%d ",an1[i]);printf("\n");
for(i=1;i<=l;i++) printf("%d ",an2[i]);printf("\n");
system("pause");
return 0;
} -
12017-10-31 16:57:53@
模拟一下就好(。◕ˇ∀ˇ◕)
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int csh[1100],csl[1100],ansh[1100],ansl[1100]; bool bj1[1100],bj2[1100]; struct student{ int x; int y; }a[5000]; int main() { memset(bj1,1,sizeof(bj1)); memset(bj2,1,sizeof(bj2)); memset(csh,0,sizeof(csh)); memset(csl,0,sizeof(csl)); int m,n,k,l,d,p=1; cin>>m>>n>>k>>l>>d; for(int i=1;i<=d;++i) { cin>>a[p].x>>a[p].y>>a[p+1].x>>a[p+1].y; if(a[p].x>a[p+1].x) csh[a[p+1].x]++; else if(a[p].x<a[p+1].x) csh[a[p].x]++; else { if(a[p].y>a[p+1].y) csl[a[p+1].y]++; else if(a[p].y<a[p+1].y) csl[a[p].y]++; } p+=2; } int hh=k,ll=l,xb,first1,first2,js1=0,js2=0; while(hh!=0) { first1=0; js1++; for(int i=1;i<=1000;++i) { if(csh[i]>first1&&bj1[i]!=0) { first1=csh[i]; xb=i; } } ansh[js1]=xb; bj1[xb]=0; hh--; } while(ll!=0) { first2=0; js2++; for(int i=1;i<=1000;++i) { if(csl[i]>first2&&bj2[i]!=0) { first2=csl[i]; xb=i; } } ansl[js2]=xb; bj2[xb]=0; ll--; } sort(ansh+1,ansh+js1+1); sort(ansl+1,ansl+js2+1); for(int i=1;i<=k;++i) cout<<ansh[i]<<" "; cout<<endl; for(int j=1;j<=l;++j) cout<<ansl[j]<<" "; return 0; }
-
12017-09-21 15:20:12@
四次快排不解释
#include<iostream> #include<algorithm> using namespace std; struct node1 { int num,sh; }heng[1010]; struct node2 { int num,sh; }shu[1010]; int comp1(const node1&x,const node1&y) { if(x.sh>y.sh) return 1; return 0; } int comp2(const node2&x,const node2&y) { if(x.sh>y.sh) return 1; return 0; } int comp3(const node1&x,const node1&y) { if(x.num<y.num) return 1; return 0; } int comp4(const node2&x,const node2&y) { if(x.num<y.num) return 1; return 0; } int main() { int m,n,k,l,d,x1,x2,y1,y2,i; cin>>m>>n>>k>>l>>d; for(i=1;i<=1002;i++) { shu[i].num=i; shu[i].sh=0; } for(i=1;i<=1002;i++) { heng[i].num=i; heng[i].sh=0; } for(i=1;i<=d;i++) { cin>>x1>>y1>>x2>>y2; if(x1==x2) { heng[min(y1,y2)].sh++; } else { shu[min(x1,x2)].sh++; } } sort(heng+1,heng+n+1,comp1); sort(shu+1,shu+m+1,comp2); sort(heng+1,heng+l+1,comp3); sort(shu+1,shu+k+1,comp4); for(i=1;i<=k;i++) { if(i!=k) cout<<shu[i].num<<" "; else cout<<shu[i].num; } cout<<endl; for(i=1;i<=l;i++) { if(i!=l) cout<<heng[i].num<<" "; else cout<<heng[i].num; } return 0; }
-
02017-11-05 16:58:29@
//统计两个相同坐标中不同的部分的最小值来计算每条路径的价值,并通过它的价值解出优先分开的路径,从而得出能够分开的最多桌数。
var i1,i2,j1,j2,i,j,m,n,k,l,d:longint;
a,b:array[0..1001,1..2]of longint;
begin
readln(m,n,k,l,d);
for i:=1 to m do a[i,2]:=i;
for i:=1 to n do b[i,2]:=i;
for i:=1 to d do
begin
readln(i1,i2,j1,j2);
if i1=j1 then
begin
if i2<j2 then inc(a[i2,1])
else inc(a[j2,1]);
end
else if i1<j1 then inc(b[i1,1])
else inc(b[j1,1]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if b[i,1]<b[j,1]then
begin
b[0]:=b[i];
b[i]:=b[j];
b[j]:=b[0];
end;
for i:=1 to k-1 do
for j:=i+1 to k do
if b[i,2]>b[j,2]then
begin
b[0]:=b[i];
b[i]:=b[j];
b[j]:=b[0];
end;
for i:=1 to k do write(b[i,2],' ');
writeln;
for i:=1 to m-1 do
for j:=i+1 to m do
if a[i,1]<a[j,1]then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
end;
for i:=1 to l-1 do
for j:=i+1 to l do
if a[i,2]>a[j,2]then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
end;
for i:=1 to l do write(a[i,2],' ');
end. -
02017-08-03 18:48:21@
Var
i,j,k,n,m,d,l2,num,x1,x2,y1,y2,t:longint;
h,l,h1,l1:array[1..10000]of longint;
a,b:array[1..10000,1..2]of longint;Function min(x,y:longint):longint;
Begin
if x<y then
exit(x)
else
exit(y);
End;Begin
readln(m,n,k,l2,d);
for i:=1 to d do
begin
readln(x1,y1,x2,y2);
if x1=x2 then
begin
num:=min(y1,y2);
inc(l[num]);
end
else
if y1=y2 then
begin
num:=min(x1,x2);
inc(h[num]);
end;
end;
for i:=1 to m do
h1[i]:=i;
for i:=1 to n do
l1[i]:=i;
for i:=1 to m-1 do
for j:=i+1 to m do
if h[i]<h[j] then
begin
t:=h[i]; h[i]:=h[j]; h[j]:=t;
t:=h1[i]; h1[i]:=h1[j]; h1[j]:=t;
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if l[i]<l[j] then
begin
t:=l[i]; l[i]:=l[j]; l[j]:=t;
t:=l1[i]; l1[i]:=l1[j]; l1[j]:=t;
end;
for i:=1 to k-1 do
for j:=i+1 to k do
if h1[i]>h1[j] then
begin
t:=h1[i]; h1[i]:=h1[j]; h1[j]:=t;
end;
for i:=1 to l2-1 do
for j:=i+1 to l2 do
if l1[i]>l1[j] then
begin
t:=l1[i]; l1[i]:=l1[j]; l1[j]:=t;
end;
for i:=1 to k-1 do
write(h1[i],' ');
writeln(h1[k]);
for i:=1 to l2-1 do
write(l1[i],' ');
writeln(l1[l2]);
readln;
End.
这道题我真的无语,,这么简单的一道题,我居然用了8次。。原因居然是我没理解清题目。原来后面的结果要按从小到大排序,而且不用看每条通道可以隔绝多少对来排。。。 -
02017-03-09 09:25:00@
利用STL进行排序,结合贪心思想即可
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int i,j,m,n,k,l,d,x,y,p,q,tem;struct data
{
int oral,sum;
}
lin[1001],row[1001];int readd()
{
int ou=0;
char ch=getchar();
while(ch>'9'||ch<'0')
ch=getchar();
while(ch<='9'&&ch>='0')
{
ou*=10;
ou+=ch-'0';
ch=getchar();
}return ou;
}int cmp(data xx,data xy)
{
if(xx.sum>xy.sum) return 1;
return 0;
}int cmp1(data xx,data xy)
{
if(xx.oral<xy.oral) return 1;
return 0;
}int main()
{
//freopen("1.txt","w",stdout);
m=readd();n=readd();k=readd();l=readd();d=readd();
for(i=1;i<=m;i++)
lin[i].oral=i;
for(i=1;i<=n;i++)
row[i].oral=i;
for(i=1;i<=d;i++)
{
x=readd();y=readd();p=readd();q=readd();
if(x==p)
lin[min(y,q)].sum++;
else
row[min(x,p)].sum++;
}
sort(lin+1,lin+n+1,cmp);
sort(row+1,row+n+1,cmp);
sort(lin+1,lin+l+1,cmp1);
sort(row+1,row+k+1,cmp1);
if(k)
{
cout<<row[1].oral;
for(i=2;i<=k;i++)
cout<<" "<<row[i].oral;}
if(l)
{
cout<<endl;
cout<<lin[1].oral;
for(i=2;i<=l;i++)
cout<<" "<<lin[i].oral;}}
-
02016-12-24 16:21:05@
#include<cstdio>
#include<iostream>
#include<algorithm>
#define maxa 1010
using namespace std;
struct Node
{
int id;
int key;
}r[maxa],c[maxa];
bool comp(Node a,Node b)
{
return a.key>b.key;
}
int main()
{
int m,n,k,l,d;
int x,y,p,q,t,i;
int a[maxa],b[maxa];
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
while(d--)
{
scanf("%d%d%d%d",&x,&y,&p,&q);
if(x==p&&y!=q)
{
t = min(y,q);
c[t].id = t;
c[t].key++;
}
else if(y==q)
{
t = min(x,p);
r[t].id =t;
r[t].key++;
}
}
sort(r,r+m+1,comp);
sort(c,c+n+1,comp);
for(i=0;i<k;++i)
a[i] = r[i].id;
for(i=0;i<l;++i)
b[i] = c[i].id;
sort(a,a+k);
sort(b,b+l);
for(i=0;i<k;++i)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<l;++i)
printf("%d ",b[i]);
return 0;
} -
02016-10-05 14:35:12@
STL大法好!
评测结果
编译成功测试数据 #0: Accepted, time = 0 ms, mem = 596 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 596 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 596 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 592 KiB, score = 10
测试数据 #4: Accepted, time = 0 ms, mem = 596 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 596 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 596 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 600 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 600 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 600 KiB, score = 10
Accepted, time = 0 ms, mem = 600 KiB, score = 100代码
c++
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
struct stc{
int x1,y1,x2,y2;
}a[2002];
struct stc2{
int num,p;
stc2(int num,int p):num(num),p(p){
}
bool operator <(stc2 rdgs)const{
return p<rdgs.p;
}
};
vector<int>v;
priority_queue<stc2> q;
#define min(a,b) ((a)>(b)?(b):(a))
int Lie[1002]={0},Hang[1002]={0};
int main(int noip2008,char** XXXXXXXXXXX){
int n,m,k,l,d;
scanf("%d%d%d%d%d",&n,&m,&k,&l,&d);
for(int i=1;i<=d;i++)
scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
for(int i=1;i<=d;i++){
if(a[i].x1==a[i].x2)
Lie[min(a[i].y1,a[i].y2)]++;else
Hang[min(a[i].x1,a[i].x2)]++;
}
for(int i=1;i<=n;i++)
q.push(stc2(i,Hang[i]));
for(int i=1;i<=k;i++)
v.push_back(q.top().num),q.pop();
sort(v.begin(),v.end());
for(vector<int>::iterator i=v.begin();i!=v.end();i++)
printf("%d ",*i);
putchar('\n');
q=priority_queue<stc2>();
v.clear();
for(int i=1;i<=m;i++)
q.push(stc2(i,Lie[i]));
for(int i=1;i<=l;i++)
v.push_back(q.top().num),q.pop();
sort(v.begin(),v.end());
for(vector<int>::iterator i=v.begin();i!=v.end();i++)
printf("%d ",*i);
putchar('\n');
return 0;
} -
02016-09-02 22:04:32@
#include<cstdio> #include<iostream> #include<algorithm> #include<vector> #include<cstring> using namespace std; const int maxn = 2000; const int INF = 1000000000; struct Node{ int val, num; bool operator < (const Node& rhs) const { return val > rhs.val; } }r[maxn], c[maxn]; int n, m, k, l, d; vector<int> rans; vector<int> cans; int main(){ cin >> n >> m >> k >> l >> d; int x1, y1, x2, y2; for (int i = 0; i < max(n, m); i++) { r[i].num = c[i].num = i; } for (int i = 0; i < d; i++) { scanf("%d%d%d%d", &x1, &y1, &x2, &y2); x1--; x2--; y1--; y2--; if (x1 == x2) { c[min(y1, y2)].val++; } else { r[min(x1, x2)].val++; } } sort(r, r+n); sort(c, c+m); for (int i = 0; i < k; i++) rans.push_back(r[i].num); for (int i = 0; i < l; i++) cans.push_back(c[i].num); sort(rans.begin(), rans.end()); sort(cans.begin(), cans.end()); for (int i = 0; i < rans.size(); i++) printf("%d ", rans[i]+1); cout << "\n"; for (int i = 0; i < cans.size(); i++) printf("%d ", cans[i]+1); return 0; }
-
02016-08-19 19:48:41@
uses math;
type arr=array[1..2000]of longint;
var
a:array[1..2020,1..4]of longint;
f1,f2,f3,f4:array[1..2000]of longint;
m,n,k,l,d,i,j,tmp,maxer:longint;
fa,fb:array[1..2000]of boolean;
procedure xp(var a:arr;b:longint);
var
i,j,tmp:longint;
begin
for i:=1 to b-1 do
for j:=i+1 to b do
begin
if a[i]>a[j] then
begin
tmp:=a[i];
a[i]:=a[j];
a[j]:=tmp;
end;
end;
end;
begin
readln(m,n,k,l,d);
for i:=1 to d do
for j:=1 to 4 do
read(a[i,j]);
fillchar(f1,sizeof(f1),0);
fillchar(f2,sizeof(f2),0);
for i:=1 to m do
for j:=1 to d do
if (min(a[j,1],a[j,3])=i) and (max(a[j,1],a[j,3])=i+1) then inc(f1[i]);
for i:=1 to n do
for j:=1 to d do
if (min(a[j,2],a[j,4])=i) and (max(a[j,2],a[j,4])=i+1) then inc(f2[i]);
fillchar(fa,sizeof(fa),true);
fillchar(fb,sizeof(fb),true);
for i:=1 to k do
begin
maxer:=1;
while fa[maxer]=false do inc(maxer);
for j:=1 to m do
if (f1[j]>f1[maxer]) and (fa[j]=true) then maxer:=j;
f3[i]:=maxer;
fa[maxer]:=false;
end;
maxer:=1;
for i:=1 to l do
begin
maxer:=1;
while fb[maxer]=false do inc(maxer);
for j:=1 to n do
if (f2[j]>f2[maxer]) and (fb[j]=true) then maxer:=j;
f4[i]:=maxer;
fb[maxer]:=false;
end;
xp(f3,k);
xp(f4,l);
for i:=1 to k-1 do
write(f3[i],' ');
writeln(f3[k]);
for i:=1 to l-1 do
write(f4[i],' ');
write(f4[l]);
end. -
02015-08-30 15:22:29@
-
02015-08-26 19:40:31@
感觉有点难,不过还是过了,呼呼,(~ o ~)~zZ……
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct zong{
int sum,num;
}y[2001];
struct heng{
int sum,num;
}x[2001];
int dog(const zong&a,const zong&b)
{
return a.sum>b.sum;
}
int cat(const heng&a,const heng&b)
{
return a.sum>b.sum;
}
int tiger(const zong&a,const zong&b)
{
return a.num<b.num;
}
int sheep(const heng&a,const heng&b)
{
return a.num<b.num;
}
int main()
{
int m,n,k,l,d,x1,y1,x2,y2,i;
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
for(i=1;i<=m;i++){
x[i].num=i;
}
for(i=1;i<=n;i++){
y[i].num=i;
}
for(i=1;i<=d;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x1==x2){
y[y1<y2?y1:y2].sum++;
}
else{
x[x1<x2?x1:x2].sum++;
}
}
sort(x+1,x+m+1,cat);
sort(y+1,y+n+1,dog);
sort(x+1,x+k+1,sheep);
sort(y+1,y+l+1,tiger);
for(i=1;i<=k;i++){
printf("%d ",x[i].num);
}
printf("\n");
for(i=1;i<=l;i++){
printf("%d ",y[i].num);
}
return 0;
} -
02015-08-10 10:05:29@
编译成功
Free Pascal Compiler version 2.6.4 [2014/03/06] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling foo.pas
foo.pas(27,33) Warning: Variable "a" does not seem to be initialized
foo.pas(28,33) Warning: Variable "b" does not seem to be initialized
foo.pas(35,10) Warning: Variable "u" does not seem to be initialized
Linking foo.exe
52 lines compiled, 0.1 sec , 29232 bytes code, 1628 bytes data
3 warning(s) issued
测试数据 #0: Accepted, time = 0 ms, mem = 772 KiB, score = 10
测试数据 #1: Accepted, time = 2 ms, mem = 772 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 776 KiB, score = 10
测试数据 #3: Accepted, time = 1 ms, mem = 776 KiB, score = 10
测试数据 #4: Accepted, time = 6 ms, mem = 772 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 772 KiB, score = 10
测试数据 #6: Accepted, time = 3 ms, mem = 772 KiB, score = 10
测试数据 #7: Accepted, time = 2 ms, mem = 776 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 776 KiB, score = 10
测试数据 #9: Accepted, time = 2 ms, mem = 772 KiB, score = 10
Accepted, time = 16 ms, mem = 776 KiB, score = 100
代码
var
m,n,k,l,d,q,w,e,r,i,j,max,u,f:longint;
a,b,uu:array[1..1000]of longint;
procedure sw(var i,j:longint);
var p:longint;
begin
p:=uu[i];uu[i]:=uu[j];uu[j]:=p;
inc(i);dec(j);
end;
procedure qsort(i,j:longint);
var l,r,mid:longint;
begin
l:=i;r:=j;mid:=uu[(l+r) div 2];
repeat
while uu[i]<mid do inc(i);
while uu[j]>mid do dec(j);
if i<=j then sw(i,j);
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
begin
readln(m,n,k,l,d);
for i:=1 to d do
begin
readln(q,w,e,r);
if q=e then if w<r then inc(a[w]) else inc(a[r]);
if w=r then if q<e then inc(b[q]) else inc(b[e]);
end;
for i:=1 to k do
begin
max:=0;
for j:=1 to m-1 do
if b[j]>max then begin max:=b[j];f:=j; end;
inc(u);uu[u]:=f;b[f]:=0;
end;
qsort(1,u);
for i:=1 to u-1 do write(uu[i],' ');
writeln(uu[u]);u:=0;
for i:=1 to l do
begin max:=0;
for j:=1 to n-1 do
if a[j]>max then begin max:=a[j];f:=j; end;
inc(u);uu[u]:=f;a[f]:=0;
end;
qsort(1,u);
for i:=1 to u-1 do write(uu[i],' ');
writeln(uu[u]);
end. -
02015-06-06 20:22:27@
录入信息的时候即时处理,处理完之后排序选出最优解,再之后在排序按顺序输出
--完毕--#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct Node
{
int sum,num;
}x[1005],y[1005];bool rule1(Node a,Node b)
{
return a.sum>b.sum;
}bool rule2(Node a,Node b)
{
return a.num<b.num;
}int main()
{
int m,n,k,l,d;
cin >> m >> n >> k >> l >> d;
for(int i=0;i<=m;i++)
{
x[i].num=i;
}
for(int i=0;i<=n;i++)
{
y[i].num=i;
}
for (int i=0,xi,yi,pi,qi;i<d;i++)
{
scanf("%d %d %d %d",&xi,&yi,&pi,&qi);
if(xi==pi)
{
y[yi<qi?yi:qi].sum++;
}
else if(yi==qi)
{
x[xi<pi?xi:pi].sum++;
}
}
sort(x,x+m,rule1);
sort(y,y+n,rule1);
sort(x,x+k,rule2);
sort(y,y+l,rule2);
for(int i=0;i<k;i++)
{
printf("%d ",x[i].num);
}
cout << endl;
for(int i=0;i<l;i++)
{
printf("%d ",y[i].num);
}
return 0;
} -
02015-02-06 13:32:42@
c++std 秒杀
c++ code
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int m,n,k,l,d,ak[1002]={0},al[1002]={0};
vector<int> ansk,ansl;
inline void setk()
{
int *p=max_element(ak,ak+1002);
ansk.push_back(int(p-ak));
*p=0;
}
inline void setl()
{
int *p=max_element(al,al+1002);
ansl.push_back(int(p-al));
*p=0;
}
int main()
{
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
for (int i=0;i!=d;++i)
{
int ta,tb,tc,td;
scanf("%d%d%d%d",&ta,&tb,&tc,&td);
ta==tc?++al[min(tb,td)]:++ak[min(ta,tc)];
}
for (int i=0;i!=k;++i) setk();
for (int j=0;j!=l;++j) setl();
sort(ansk.begin(),ansk.end());
sort(ansl.begin(),ansl.end());
for (int i=0;i!=k;++i) printf("%d ",ansk[i]);
printf("\n");
for (int i=0;i!=l;++i) printf("%d ",ansl[i]);
} -
02015-01-16 20:05:33@
TM的太坑了,注意输出还要排序
-
02014-11-06 23:28:37@
type
arr=array[1..1000] of longint;
var
tdh,tdl,mh,ml:arr;
maxh:longint;
maxl:longint;
i,j,m,n,k,l,x,y,p,q,d:longint;
function findmax(a:arr):longint;
var
i:integer;
begin
findmax:=1;
for i:=2 to 1000 do
if a[findmax]<a[i] then findmax:=i;
end;
begin
fillchar(tdh,sizeof(tdh),0);
fillchar(tdl,sizeof(tdl),0);
read(m,n,k,l,d);
for i:=1 to d do
begin
read(x,y,p,q);
if x=p then tdl[(y+q) div 2]:=tdl[(y+q) div 2]+1
else tdh[(x+p) div 2]:=tdh[(x+p) div 2]+1;
end;
for i:=1 to k do
begin
maxh:=findmax(tdh);
tdh[maxh]:=0;
mh[maxh]:=1;
end;
for i:=1 to l do
begin
maxl:=findmax(tdl);
tdl[maxl]:=0;
ml[maxl]:=1;
end;
j:=1;
for i:=1 to m do
begin
if (mh[i]=1) and (j=k) then
begin
write(i);
break;
end;
if (mh[i]=1) and (j<k) then
begin
j:=j+1;
write(i,' ');
end;
end;
writeln;
j:=1;
for i:=1 to n do
begin
if (ml[i]=1) and (j=l) then
begin
write(i);
break;
end;
if (ml[i]=1) and (j<l) then
begin
j:=j+1;
write(i,' ');
end;
end;
end. -
02013-12-26 21:34:27@
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct seat{
int num;
int sum;
};
int cmp (const void *a,const void *b)
{ struct seat *c=(seat *)a;
struct seat *d=(seat *)b;
return c->sum<d->sum? 1:-1;
}
int main ()
{ seat sa[1001],sb[1001];
int m,n,k,l,d,i,t,a[1001],b[1001],x,y,p,q;
memset(a,0,sizeof (a));
memset(b,0,sizeof (b));
cin>>m>>n>>k>>l>>d;
for (i=0;i<d;i++)
{cin>>x>>y>>p>>q;
if (x==p)
{t=y>q? q:y;
a[t]++;
}
else
{t=x>p? p:x;
b[t]++;
}
}
for (i=1;i<=m;i++)
{sa[i-1].num=i;
sa[i-1].sum=a[i];
}
for (i=1;i<=n;i++)
{sb[i-1].num=i;
sb[i-1].sum=b[i];
}
qsort (sa,m-1,sizeof (sa[0]),cmp);
qsort (sb,n-1,sizeof (sb[0]),cmp);
memset (a,0,sizeof (a));
for (i=0;i<k;i++)
a[sb[i].num]++;
for (i=0;i<n;i++)
if (a[i])
cout<<i<<" ";
cout<<endl;
memset (a,0,sizeof (a));
for (i=0;i<l;i++)
a[sa[i].num]++;
for (i=0;i<m;i++)
if (a[i])
cout<<i<<" ";
return 0;
} -
02013-11-04 13:21:20@
测试数据 #0: Accepted, time = 15 ms, mem = 464 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 468 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 468 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 464 KiB, score = 10
测试数据 #4: Accepted, time = 3 ms, mem = 468 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 468 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 472 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 480 KiB, score = 10
测试数据 #8: Accepted, time = 15 ms, mem = 476 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 480 KiB, score = 10
Accepted, time = 33 ms, mem = 480 KiB, score = 100
感觉又有信心了,,一次AC,,爽啊
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int cmp1(int a[2],int b[2]){ return a[0]>b[0];}
int cmp2(int a[2],int b[2]){ return a[1]<b[1];}
int main(){
int a,b,c,d,m,n,i,j,k;
scanf("%d %d %d %d %d",&m,&n,&i,&j,&k);
int **h=new int *[m+1];
int **l=new int *[n+1];
for(int q=1;q<=m;q++) h[q]=new int [2],h[q][0]=0,h[q][1]=q;
for(int q=1;q<=n;q++) l[q]=new int [2],l[q][0]=0,l[q][1]=q;
for(int q=1;q<=k;q++){
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a==c) l[b<d?b:d][0]++;
else h[a<c?a:c][0]++;
}
sort(h+1,h+m+1,cmp1);
sort(h+1,h+i+1,cmp2);
sort(l+1,l+n+1,cmp1);
sort(l+1,l+j+1,cmp2);
for(int q=1;q<=i;q++)
printf("%d ",h[q][1]);
printf("\n");
for(int q=1;q<=j;q++)
printf("%d ",l[q][1]);
return 0;
} -
02013-10-22 19:30:46@
看清输出格式!