讨论 / 邪门了
a710128 2013-07-22 03:26:00
点我顶贴 收藏 删除
#include<stdio.h>

#include<stdlib.h>

struct xs

{

int id,fs,sl;

}sz[200001],lin1[100001],lin2[100001];

int n,r,q;

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

{

if((*(xs *)b).fs==(*(xs *)a).fs) return (*(xs *)a).id-(*(xs *)b).id;

return (*(xs *)b).fs-(*(xs *)a).fs;

}

void hb()

{

int p=1,k=1;

while(p+k<=n*2+1)

{

if(p<=n&&k<=n&&lin1[p].fs==lin2[k].fs)

{

if(lin1[p].id<lin2[k].id) {sz[p+k-1]=lin1[p]; p++;}

else {sz[p+k-1]=lin2[k];k++;}

continue;

}

if(k>n||lin1[p].fs>lin2[k].fs) {sz[p+k-1]=lin1[p];p++;continue;}

if(p>n||lin2[k].fs>lin1[p].fs) {sz[p+k-1]=lin2[k];k++;continue;}

}

return ;

}

int main()

{

scanf("%d %d %d",&n,&r,&q);

for(int i=1;i<=n*2;i++) sz[i].id=i;

for(int i=1;i<=2*n;i++) scanf("%d",&sz[i].fs);

for(int i=1;i<=n*2;i++) scanf("%d",&sz[i].sl);

qsort(sz+1,n*2,sizeof(sz[0]),cmp);

while(r>0)

{

r--;

for(int i=1;i<=n;i++) if(sz[i*2-1].sl>sz[i*2].sl) {sz[i*2-1].fs++;lin1[i]=sz[i*2-1]; lin2[i]=sz[i*2];}

else {sz[i*2].fs++;lin1[i]=sz[i*2];lin2[i]=sz[i*2-1];}

hb();

}

printf("%d",sz[q].id);

getchar();

getchar();

return 0;

}

提交第一次 1组超时 2组错误

同样代码 提交第2次 就 AC了,真是奇怪了

查看更多回复
提交回复