Satisfactory Pairs HackerRank - pairs-again——预处理+不定长数组应用
2017-06-25 21:22
531 查看
Think:
1题意:输入n, 求(a, b)满足a < b 且存在x, y使得x*a + y*b = n的二元组个数,要求n, a, b, x, y皆为正整数
2方法:先预处理小于n的数的约数,然后暴力试探+剪枝,试探符合题意的二元组个数,时间复杂度 1/x 从1到n积分,为nln(n)
vjudge题目链接
建议参考博客1
建议参考博客2
以下为Accepted代码
以下为建议参考代码
1题意:输入n, 求(a, b)满足a < b 且存在x, y使得x*a + y*b = n的二元组个数,要求n, a, b, x, y皆为正整数
2方法:先预处理小于n的数的约数,然后暴力试探+剪枝,试探符合题意的二元组个数,时间复杂度 1/x 从1到n积分,为nln(n)
vjudge题目链接
建议参考博客1
建议参考博客2
以下为Accepted代码
#include <bits/stdc++.h> using namespace std; const int N = 3e5 + 4; vector <int> y_b ; vector <int> :: iterator b; int book ; int main(){ int n, i, j, a, x, t, ans; scanf("%d", &n); for(i = 1; i <= n; i++){ for(j = 1; j*j <= i; j++){ if(i%j == 0){ y_b[i].push_back(j); if(i*i != j){ t = i / j; y_b[i].push_back(t); } } } sort(y_b[i].begin(), y_b[i].end(), greater<int>()); } ans = 0; for(a = 1; a < n; a++){ for(x = 1; x*a < n; x++){ t = n - x*a; for(b = y_b[t].begin(); b != y_b[t].end(); b++){ if((*b) <= a) break; if(book[*b] != a){ ans++; book[*b] = a; } } } } printf("%d\n", ans); return 0; }
以下为建议参考代码
#include <bits/stdc++.h> using namespace std; const int N = 3e5 + 4; vector <int> y_b ;/*记录当前元素的约数*/ vector <int> :: iterator b; int book ;/*实数型全局变量初始化默认为0*/ bool cmp(int a, int b){ return a > b; } int main(){ int n, i, j, a, x, t, ans; scanf("%d", &n); for(i = 1; i <= n; i++){ for(j = 1; j*j <= i; j++){ if(i%j == 0){ y_b[i].push_back(j); if(i*i != j){ t = i / j; y_b[i].push_back(t); } } } sort(y_b[i].begin(), y_b[i].end(), greater<int>()); } ans = 0; for(a = 1; a < n; a++){ for(x = 1; x*a < n; x++){ t = n - x*a; for(b = y_b[t].begin(); b != y_b[t].end(); b++){ if((*b) <= a)/*题意:a < b*/ break; if(book[*b] != a){/*标记判重*/ ans++; book[*b] = a; } } } } printf("%d\n", ans); return 0; }
相关文章推荐
- D - Satisfactory Pairs HackerRank - pairs-again
- HackerRank - pairs-again(暴力+预处理)
- D - Satisfactory Pairs HackerRank - pairs-again(查找因数组合题目)
- Satisfactory Pairs HackerRank - pairs-again
- HackerRank Algorithms-Search-Pairs 数组的固定差对数
- Satisfactory Pairs (HackerRank pairs-again)
- 【数学思维 && ax + by = n 给你n让你求有多少对(a,b) a<b 满足方程其中x,y是正整数】HackerRank Satisfactory Pairs
- [HackerRank-pairs-again] Satisfactory Pairs
- 【HackerRank】Find the Median(Partition找到数组中位数)
- POJ 题目3623 Best Cow Line, Gold(后缀数组rank简单应用)
- 不定数组vector的简单应用
- 不定长数组 Vector的 应用
- POJ-1743:Musical Theme(后缀数组加高度数组的应用以及预处理)
- 【HackerRank】Pairs
- 函数指针数组与不定参数的应用
- 【STL】 poj1208&&UVa101 The Blocks Problem (不定长数组vector的应用)
- HackerRank "Tower Breakers, Again!"
- HackerRank "Chessboard Game, Again!"
- C#数组应用分析第1/2页
- 把vbscript发挥到它的极限应用之一(数组)!!!