wa到自闭,终于AC了

这题很焦灼(那么简单的题目搞那么久)。wa了好几次。有几个坑点(也可能是在下愚昧)。
1.存在重复的点。
2.本来是想用贪心的,1的找最大的,-1的也找最大,然后减去交叉点。然后wa好几次,发现不行的。还得暴力全部情况匹配一次。因为点的排列不同。
    所以只能斜率是1的打表一遍,-1打表一遍,然后全部情况两重循环匹配一遍。找最大就行了,lj代码就不贴了。
全部评论
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;     } }
点赞 回复 分享
发布于 2019-04-29 14:04
感觉写了一个复杂度好像不太对的做法水过了 #include <bits/stdc++.h> using namespace std; const int MAXN = 1e3 + 5; int n, x[MAXN], y[MAXN]; vector<int> A[MAXN * 2], B[MAXN * 2]; int main() {     scanf("%d", &n);     for (int i = 0; i < n; i++) scanf("%d", &x[i]);     for (int i = 0; i < n; i++) scanf("%d", &y[i]);     for (int i = 0; i < n; i++)     {         A[y[i] + x[i]].push_back(i);         B[y[i] - x[i] + 1000].push_back(i);     }     int ans = 0;     for (int i = 0; i < 2000; i++)     {         for (int j = 0; j < 2000; j++)         {             set<int> s;             for (auto k : A[i]) s.insert(k);             for (auto k : B[j]) s.insert(k);             ans = max(ans, (int)s.size());         }     }     printf("%d\n", ans);     return 0; } /* 4 1 4 4 5 3 0 2 3 */
1 回复 分享
发布于 2019-03-02 19:36
wa了一个礼拜
点赞 回复 分享
发布于 2019-04-25 20:21
赞,ac了。
点赞 回复 分享
发布于 2019-02-23 15:37
所谓自闭,原来是这个意思
点赞 回复 分享
发布于 2019-02-22 23:15

相关推荐

09-02 18:18
门头沟学院 Java
感觉自己已经不属于校园了,晚上去操场散步看着草坪上的人,尸体暖暖的。
offersarec...:我已经不敢去操场了,那些青春跃动的身影,三两成群嬉声一片。我从未拥有过,也回不去
点赞 评论 收藏
分享
拼尽全力A了2.5算法
投递美团等公司10个岗位
点赞 评论 收藏
分享
勇敢的90后想交流:我愿意付费上班,楼主你就安心字节待着吧,我是真的喜欢上班
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务