获赞
26
粉丝
2
关注
4
看过 TA
10
门头沟学院
2021
Java
IP属地:北京
暂未填写个人简介
私信
关注
2019-02-01 19:47
百度_研发工程师
这题很焦灼(那么简单的题目搞那么久)。wa了好几次。有几个坑点(也可能是在下愚昧)。 1.存在重复的点。 2.本来是想用贪心的,1的找最大的,-1的也找最大,然后减去交叉点。然后wa好几次,发现不行的。还得暴力全部情况匹配一次。因为点的排列不同。     所以只能斜率是1的打表一遍,-1打表一遍,然后全部情况两重循环匹配一遍。找最大就行了,lj代码就不贴了。
AsuraKing:AC了 #include<iostream> #include<string.h> using namespace std; int x[1001], y[1001], n; int func(int a, int b) {     int sum = 0;     for (int i = 0; i < n; i++)     {         if (x[i] + y[i] == a || y[i] - x[i] == b)         {             sum++;         }     }     return sum; } int main() {     while (cin >> n)     {         int a[10000] = { 0 };         int b[10000] = { 0 };         memset(x, 0, sizeof(x));         memset(y, 0, sizeof(y));         int max1 = 0, max2 = 0;         int sum = 0;         int ok = 1;         int ak = 1;         for (int i = 0; i < n; i++)         {             cin >> x[i];         }         for (int i = 0; i < n; i++)         {             cin >> y[i];             ok = 1;             ak = 1;             for (int j = 0; j < max1; j++)             {                 if (a[j] == x[i] + y[i])                 {                     ok = 0;                 }             }             if (ok)             {                 a[max1] = x[i] + y[i];                 max1++;             }             for (int j = 0; j < max2; j++)             {                 if (b[j] == y[i] - x[i])                 {                     ak = 0;                 }             }             if (ak)             {                 b[max2] = y[i] - x[i];                 max2++;             }         }         for (int i = 0; i < max1; i++)             {                 for (int j = 0; j < max2; j++)                 {                     if (func(a[i], b[j]) > sum)                     {                         sum = func(a[i], b[j]);                     }                 }             }         cout << sum << endl;     } }
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务