本文主要是介绍Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization(思维),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:http://codeforces.com/contest/1133/problem/D
题意:是输入一个n,加下来分别输入n个a[i]和b[i],现在让你找一个d,现在要求一个c数组,c[i] = d * a[i] + b[i],也就是找一个d使得c数组中有最多的0,问最多的0的个数为多少。
思路:对b[i] / a[i]化成最简分数,用map存一下分数,最大的分数个数就是答案。需要注意的是a[i]和b[i]都为0是一定满足要求的,还要考虑a[i]为 0 b[i]不为0(分母不能为0)的情况。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
int n, a[MAXN], b[MAXN];
map<pair<int, int>, int> mp;
int main()
{scanf("%d", &n);for (int i = 0; i < n; i++) scanf("%d", &a[i]);int zero = 0;for (int i = 0; i < n; i++){scanf("%d", &b[i]);if (a[i] == 0 && b[i] == 0) zero++;if (a[i] == 0) continue;int G = __gcd(a[i], b[i]);a[i] /= G, b[i] /= G;mp[make_pair(b[i], a[i])]++;}int ans = 0;for (auto i : mp) ans = max(ans, i.second);printf("%d\n", ans + zero);return 0;
}
这篇关于Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization(思维)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!