您的位置:首页 > 其它

C~K祝你元宵节快乐!—结构体数组+3重for循环暴力求解

2017-02-16 23:27 633 查看
think;

1题目一开始自己做的时候是用二维数组标记出现过的点,然后再用一个二维数组重新开始遍历,中间不断更新最大值和最大值的坐标,然后提交后超时,今天晚上终于看了题解,发现学哥是用结构体数组记录出现过的点,再用一个暴力的3重for循环求解,提交后AC,感觉自己还是做题少了,多做题目,开阔思路,并且一定要有题后反思,反思一下自己的收获和不足之处,严厉纠正自己的错误,努力使自己变得更加优秀,加油

C~K祝你元宵节快乐!

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic

Problem Description

C~K 是个长得比较帅的吃货,现在在某一个平面直角坐标系中有 n 个汤圆(每个汤圆都在格点上),C~K 有一个正方形的框,现在他站在一个格点上,手持正方形框来框住一部分区域,他可以吃到正方形框内的汤圆(在正方形上的也计算在内,且正方形的边长与 x 轴,y 轴平行),C~K 比较忙,现在请你帮他计算一下站在哪个位置可以吃到最多的汤圆。

Input

第一行输入一个组数 T (1 <= T <= 20)。

对于每组数据:

每一行输入一个整数 n (1 <= n <= 100),代表汤圆的数量。

接下来 n 行每行输入两个整数 x, y (1 <= x, y <= 100),代表汤圆的坐标。

接下来的一行输入一个整数 h (1 <= h <= 100),代表 C~K 的正方形框的边长。

Output

对于每组输入,先输出 “Case x:”(不包括引号)代表第几组。

接下来一行输出三个数 X,Y,K,分别代表 C~K 可以吃到最多汤圆的坐标及汤圆的数量。

(如果有多个满足条件的格点,输出 x 坐标最小的哪一个,如果多个格点 x 坐标相同,则输出 y 坐标最小的那一个)

Example Input

1

2

1 1

2 2

1

Example Output

Case 1:

1 1 2

Hint

Author

「2017年寒假集训 阶段测试赛2 - 元宵节专场」C~K

#include <stdio.h>
#include <string.h>
struct node
{
int x;
int y;
}a[104];
int main()
{
int T, n, h, i, j, k, u, v, sum, ans;
scanf("%d", &T);
for(k = 1; k <= T; k++)
{
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%d %d", &a[i].x, &a[i].y);
}
scanf("%d", &h);
sum  = 0;///初始化
u = v = 0;
for(i = 1; i < 104; i++)
{
for(j = 1;j < 104; j++)
{
ans = 0;///注意初始化位置
for(int z = 0; z < n; z++)
{
if(a[z].x >= i-h && a[z].x <= i+h && a[z].y >= j-h && a[z].y <= j+h)
ans++;
}
if(sum < ans)
{
u = i, v = j, sum = ans;
}
}
}
printf("Case %d:\n", k);
printf("%d %d %d\n", u, v, sum);
}
return 0;
}

/***************************************************
User name:
Result: Accepted
Take time: 36ms
Take Memory: 108KB
Submit time: 2017-02-16 23:21:44
****************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息