数星星的等级

cjh94520 2012-11-16 10:27:24
1144 数星星
时间限制:564MS 内存限制:65536K
提交次数:34 通过次数:8

题型: 编程题 语言: 无限制



描述
天文学家们喜欢观察星星。它们把每颗星星看成一个点,并把每颗星星左下方(即横坐标和纵坐标都不比它大)的星星颗数作为它的等级值。 现给出所有星星(星星个数为N)的坐标,计算并输出指定编号的星星的等级。 注意:不存在相同坐标的星星

Input
第一行为N 后N行为编号为1到N的星星的坐标(坐标用整数) 此后是M 后一行是M个星星的编号 N<=100000 M<=1000 坐标范围0<=x,y<=1000000Output
要求依次输出这M个星星的等级,一行一个
Sample Input
5 0 0 2 0 3 0 1 1 2 2 2 4 5
Sample Output
1 3


为什么编号5的等级是3··不是4么
我这个代码行么

#include<stdio.h>
struct
{
int left;
int right;
}star[10000];
main()
{
int n ;
int i,j,k,num,grade;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d %d",&star[i].left,&star[i].right);
}

scanf("%d",&num);
for(i=1;i<=num;i++)
{
scanf("%d",&j);
for(k=1;k<=n;k++)
if((star[k].left<star[j].left)&&(star[k].right<star[j].right))
{star[0] = star[k];grade=k;break;}

for(k=k+1;k<=n;k++)
{
// if(star[0].left<star[k].left&&star[k]<star[j].left&&star[0].right<star[k].right&&star[k]<star[j].right)
if((star[0].left<star[k].left)&&(star[0].right<star[k].right))
if((star[k].left<star[j].left)&&(star[k].right<star[j].right))
{star[0] = star[k];grade = k;}
}
printf("%d",grade);
printf("\n");
}


}
...全文
348 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjh94520 2012-11-16
  • 打赏
  • 举报
回复
#include<stdio.h>
struct 
{
	int left;
	int right;
}star[10000];
main()
{
	int n,gradem=1 ;
	int i,j,k,num,grade[100];
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d %d",&star[i].left,&star[i].right);
	}
	
	scanf("%d",&num);
	for(i=1;i<=num;i++,gradem++)
	{   grade[i]=0;
		scanf("%d",&j);

		for(k=1;k<=n;k++)
		{
         
				if((star[k].left<=star[j].left)&&(star[k].right<=star[j].right))
						grade[i]++;
		}

	
	}
	for(i = 1 ;i <= num ; i++)
		printf("%d\n",grade[i]-1);
	
    

}
还是错了··
dpdp_2012 2012-11-16
  • 打赏
  • 举报
回复
想要真正通过的话,得线段树 树状数组
cjh94520 2012-11-16
  • 打赏
  • 举报
回复
告诉我答案啊·!!!
ryanljx1984 2012-11-16
  • 打赏
  • 举报
回复
晕~看了半天才看懂~楼主加点儿标点符号啊~~~
dpdp_2012 2012-11-16
  • 打赏
  • 举报
回复
这个是暴力程序,可能会超时
#include <stdio.h>

struct
{
	int x,y;
}star[100000];

int main()
{
	int n,m,k,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d%d",&star[i].x,&star[i].y);
	scanf("%d",&m);
	while(m--)
	{
		int ans=0;
		scanf("%d",&k);
		for(i=0;i<n;i++)
			if(i!=k-1&&star[i].x<=star[k-1].x&&star[i].y<=star[k-1].y)
				++ans;
		printf("%d\n",ans);
	}
}
cjh94520 2012-11-16
  • 打赏
  • 举报
回复
Sample Input 5 0 0 2 0 3 0 1 1 2 2 2 4 5 Sample Output 1 3 这个清晰点
hondely 2012-11-16
  • 打赏
  • 举报
回复
编号是怎么编的??????

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧