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: AcceptedTake time: 36msTake Memory: 108KBSubmit time: 2017-02-16 23:21:44****************************************************/新闻热点
疑难解答