USACO Section 1.4 - Arithmetic Progressions (暴力)

来源:互联网 发布:excel macro编程 编辑:程序博客网 时间:2024/05/21 08:53

题意

给出m,要求在[0, m]的范围内,由(0 <= p, q <= m),p2+q2所组成的集合内,输出长度为n的等差数列。

思路

m最大才250,直接开个vis数组,记录达到的数。

接下来我是把这些数都存在一个数组里,从这个数组里取出来,两两枚举k,然后判断接下来的数是否vis过。

代码

  1. /*
  2. ID: mycodeb1
  3. LANG: C++
  4. TASK: ariprog
  5. */
  6. #include <cstdio>
  7. #include <stack>
  8. #include <set>
  9. #include <iostream>
  10. #include <string>
  11. #include <vector>
  12. #include <queue>
  13. #include <functional>
  14. #include <cstring>
  15. #include <algorithm>
  16. #include <cctype>
  17. #include <ctime>
  18. #include <cstdlib>
  19. #include <fstream>
  20. #include <string>
  21. #include <sstream>
  22. #include <map>
  23. #include <cmath>
  24. #define LL long long
  25. #define lowbit(x) ((x) & (-x))
  26. #define MP(a, b) make_pair(a, b)
  27. #define MS(arr, num) memset(arr, num, sizeof(arr))
  28. #define PB push_back
  29. #define F first
  30. #define S second
  31. #define ROP freopen("input.txt", "r", stdin);
  32. const double PI = acos(-1.0);
  33. const int INF = 0x3f3f3f3f;
  34. using namespace std;
  35. const int MAXN = 250 + 5;
  36. typedef pair<int, int> pii;
  37. typedef vector<int>::iterator viti;
  38. typedef vector<pii>::iterator vitii;
  39. int vis[MAXN * MAXN * 2];
  40. vector<pii> ans;
  41. vector<int> mp;
  42. int main()
  43. {
  44. //ROP;
  45. freopen("ariprog.in", "r", stdin);
  46. freopen("ariprog.out", "w", stdout);
  47. int n, m, i, j;
  48. scanf("%d%d", &n, &m);
  49. for (i = 0; i <= m; i++)
  50. for (j = 0; j <= m; j++)
  51. {
  52. int a = i * i + j * j;
  53. if (vis[a]) continue;
  54. mp.PB(a);
  55. vis[a] = 1;
  56. }
  57. sort(mp.begin(), mp.end());
  58. for (i = 0; i < mp.size(); i++)
  59. for (j = i + 1; j < mp.size(); j++)
  60. {
  61. int cnt = 2;
  62. int k = mp[j] - mp[i], last = mp[j];
  63. if (mp[i] + (n - 1) * k > mp.back()) continue;
  64. while (cnt < n)
  65. {
  66. if (!vis[mp[i] + cnt * k]) break;
  67. else cnt++;
  68. }
  69. if (cnt == n) ans.push_back(MP(k, mp[i]));
  70. }
  71. sort(ans.begin(), ans.end());
  72. if (ans.empty())
  73. {
  74. puts("NONE");
  75. return 0;
  76. }
  77. for (vitii it = ans.begin(); it != ans.end(); it++)
  78. printf("%d %d\n", it->S, it->F);
  79. return 0;
  80. }
0 0
原创粉丝点击