HackerRank - pairs-again(暴力+预处理)
2017-06-26 11:13
711 查看
题目链接:
https://www.hackerrank.com/contests/w26/challenges/pairs-again题目大意:
给定一个数n,问有多少对a,b满足xa+by=n至少有一个解,a<b并且0<b,0<y,且x,y是整数。解题过程:
比赛时候的题,当初那场比赛运气还不错,这道题看到一堆人WA了60多发,于是没敢去做,后来去补了,也算是学下如何预处理约数。题目分析:
这题的时限很奇怪,都能跑到59秒。这里要预处理出来前n个数的所有约数。然后枚举a和x,n−xa为bx,把bx的约数当做b,记录下bx大于a的约数,不过对于ax+by=cx+by=n的情况要去一下重。
预处理约数可以类比下欧拉筛法的思想。
AC代码:
#include <bits/stdc++.h> using namespace std; const int MAX = 312345; vector<int> divisor[MAX]; int flag[MAX]; int main() { int n; cin >> n; //预处理前n个数的约数,类比欧拉筛法 for (int i = 2; i < n; i++) { for (int j = i; j < n; j += i) { divisor[j].push_back(i); } } int ans = 0; memset(flag, 0, sizeof(flag)); for (int a = 1; a < n; a++) { for (int xa = a; xa < n; xa += a) { int yb = n - xa; for (int i = 0; i < divisor[yb].size(); i++) { int t = divisor[yb][i]; //让每个t对于每个a只用一次,并且保证t > a if (flag[t] == a || t <= a) continue; flag[t] = a; ans++; } } } cout << ans; }
相关文章推荐
- Satisfactory Pairs HackerRank - pairs-again——预处理+不定长数组应用
- Satisfactory Pairs HackerRank - pairs-again
- D - Satisfactory Pairs HackerRank - pairs-again
- Satisfactory Pairs (HackerRank pairs-again)
- D - Satisfactory Pairs HackerRank - pairs-again(查找因数组合题目)
- [HackerRank-pairs-again] Satisfactory Pairs
- HackerRank "Tower Breakers, Again!"
- HackerRank "Chessboard Game, Again!"
- Hackerrank (70)Range Modular Query 莫队+暴力
- 【数学思维 && ax + by = n 给你n让你求有多少对(a,b) a<b 满足方程其中x,y是正整数】HackerRank Satisfactory Pairs
- UVA 10976 Fractions Again?! (暴力预处理)
- 【HackerRank】Pairs
- HackerRank Algorithms-Search-Pairs 数组的固定差对数
- Codeforces 769D k-Interesting Pairs Of Integers【思维+预处理+暴力枚举】
- HackerRank "Xor and Sum"
- [hackerrank]Unique Divide And Conquer
- 【Hacker Rank】04.Arithmetic Operators
- 【hackerrank week of code 26】Hard Homework
- 【HackerRank】 The Full Counting Sort
- [hackerrank Value of all Permutations]