CF思维联系–CodeForces - 222 C Reducing Fractions(数学+有技巧的枚举)
ACM思维题训练集合
To confuse the opponents, the Galactic Empire represents fractions in an unusual format. The fractions are represented as two sets of integers. The product of numbers from the first set gives the fraction numerator, the product of numbers from the second set gives the fraction denominator. However, it turned out that the programs that work with fractions in this representations aren’t complete, they lack supporting the operation of reducing fractions. Implement this operation and the Empire won’t forget you.
Input
The first input line contains two space-separated integers n, m (1 ≤ n, m ≤ 105) that show how many numbers the first set (the numerator) and the second set (the denominator) contain, correspondingly.
The second line contains n space-separated integers: a1, a2, …, an (1 ≤ ai ≤ 107) — the numbers that are multiplied to produce the numerator.
The third line contains m space-separated integers: b1, b2, …, bm (1 ≤ bi ≤ 107) — the numbers that are multiplied to produce the denominator.
Output
Print the answer to the problem in the form, similar to the form of the input data. The number of values in the sets you print nout, mout must satisfy the inequality 1 ≤ nout, mout ≤ 105, and the actual values in the sets aout, i and bout, i must satisfy the inequality 1 ≤ aout, i, bout, i ≤ 107.
Separate the values in the lines by spaces. The printed fraction must be reduced, that is, there mustn’t be such integer x (x > 1), that the numerator and the denominator of the printed fraction are divisible by x. If there are several matching answers, print any of them.
Examples
Input
3 2
100 5 2
50 10
Output
2 3
2 1
1 1 1
Input
4 3
2 5 10 20
100 1 3
Output
1 1
20
3
Note
In the first test sample the numerator equals 1000, the denominator equals 500. If we reduce fraction 1000/500 by the greatest common divisor of the numerator and the denominator (by 500), we obtain fraction 2/1.
In the second test sample the numerator equals 2000, the denominator equals 300. If we reduce fraction 2000/300 by the greatest common divisor of the numerator and the denominator (by 100), we obtain fraction 20/3.

日常WA一天
不看跑的数据,我都不知道自己怎么错的,老天爷。我的输出超出了限制100001不能超过100000,我觉得那时候,那些没有过的,一定是这个原因,出题人真是丧心病狂。
第一个代码是错的,第二个是修改了的,换了方式。
#include <bits/stdc++.h>
using namespace std;
template <typename t>
void read(t &x)
{
char ch = getchar();
x = 0;
int f = 1;
while (ch < '0' || ch > '9')
f = (ch == '-' ? -1 : f), ch = getchar();
while (ch >= '0' && ch <= '9')
x = x * 10 + ch - '0', ch = getchar();
x *f;
}
bitset<100000010> v;
int prime[6000001];
int m = 0;
void primes(int n)
{
for (int i = 2; i * i <= n; i++)
{
if (!v[i])
{
for (int j = i * i; j <= n; j += i)
v[j] = 1;
}
}
for (int i = 2; i <= n; i++)
if (!v[i])
prime[m++] = i;
}
vector<int> a[4];
unordered_map<int, int> c, d;
int main()
{
int n, m, maxi = 0;
read(n), read(m);
primes(10000005);
for (int i = 0; i < n; i++)
{
int tem;
read(tem);
maxi = max(maxi, tem);
c[tem]++;
}
for (int i = 0; i < m; i++)
{
int tem;
read(tem);
maxi = max(maxi, tem);
d[tem]++;
}
//cout << 1 << endl;
for (int i = 0; prime[i] <= maxi; i++)
{
// cout<<i<<endl;
int cnt = 0, ans = 0, cnt2 = 0;
int flag = 1;
for (auto po = c.begin(); po != c.end();)
{
// cout<<1<<endl;
pair<int, int> tem = *po;
cnt = 0;
if (tem.first < prime[i])
{
po++;
continue;
}
else
{
flag = 0;
while (tem.first % prime[i] == 0)
{
tem.first /= prime[i];
cnt++;
//cout<<i<<endl;
}
cnt *= tem.second;
auto pi = po;
po++;
c.erase(pi);
if (tem.first != 1)
c[tem.first] += tem.second;
}
ans += cnt;
}
cnt2 = ans;
ans = 0;
for (auto po = d.begin(); po != d.end();)
{
pair<int, int> tem = *po;
cnt = 0;
if (tem.first < prime[i])
{
po++;
continue;
}
else
{
flag = 0;
while (tem.first % prime[i] == 0)
{
tem.first /= prime[i];
cnt++;
//cout<<i<<endl;
}
cnt *= tem.second;
auto pi = po;
po++;
d.erase(pi);
if (tem.first != 1)
d[tem.first] += tem.second;
}
ans += cnt;
}
cnt = cnt2 - ans;
if (cnt == 0)
continue;
else if (cnt < 0)
{
cnt = -cnt;
int temp = 1;
int j = 0;
for (; j < cnt; j++)
{
temp *= prime[i];
if (temp * prime[i] > 10000000)
{
a[3].push_back(temp);
// cout << 1 << endl;
temp = 1;
}
}
a[3].push_back(temp);
}
else
{
int temp = 1;
int j = 0;
for (; j < cnt; j++)
{
temp *= prime[i];
if (temp * prime[i] > 10000000)
{
a[2].push_back(temp);
// cout << 1 << endl;
temp = 1;
}
}
a[2].push_back(temp);
}
if (flag)
break;
}
if (a[2].size() == 0)
a[2].push_back(1);
if (a[3].size() == 0)
a[3].push_back(1);
cout << a[2].size() << " " << a[3].size() << endl;
for (int i = 0; i < a[2].size(); ++i)
printf("%d ", a[2][i]);
puts("");
for (int i = 0; i < a[3].size(); ++i)
printf("%d ", a[3][i]);
puts("");
}
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n, m, tot, a[100005], b[100005], z[10000005], pos[10000005], q[1000005], t1[1000005], t2[1000005];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for (int i = 1; i <= m; ++i)
scanf("%d", &b[i]);
for (int i = 2; i <= 10000000; ++i)
if (!z[i])
{
for (int j = i; j <= 10000000; j += i)
z[j] = i;
q[++tot] = i;
pos[i] = tot;
}
for (int i = 1; i <= n; ++i)
{
int k = a[i];
while (k != 1)
{
t1[pos[z[k]]]++;
k /= z[k];
}
}
for (int i = 1; i <= m; ++i)
{
int k = b[i];
while (k != 1)
{
t2[pos[z[k]]]++;
k /= z[k];
}
}
for (int i = 1; i <= tot; ++i)
{
t1[i] = min(t1[i], t2[i]);
t2[i] = t1[i];
}
printf("%d %d\n", n, m);
for (int i = 1; i <= n; ++i)
{
int k = a[i], p = a[i];
while (k != 1)
{
if (t1[pos[z[k]]])
{
p /= z[k];
t1[pos[z[k]]]--;
}
k /= z[k];
}
printf("%d ", p);
}
printf("\n");
for (int i = 1; i <= m; ++i)
{
int k = b[i], p = b[i];
while (k != 1)
{
if (t2[pos[z[k]]])
{
p /= z[k];
t2[pos[z[k]]]--;
}
k /= z[k];
}
printf("%d ", p);
}
printf("\n");
return 0;
}
CF思维联系–CodeForces - 222 C Reducing Fractions(数学+有技巧的枚举)的更多相关文章
- CF思维联系--CodeForces - 218C E - Ice Skating (并查集)
题目地址:24道CF的DIv2 CD题有兴趣可以做一下. ACM思维题训练集合 Bajtek is learning to skate on ice. He's a beginner, so his ...
- CF思维联系– CodeForces - 991C Candies(二分)
ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...
- CF思维联系–CodeForces - 225C. Barcode(二路动态规划)
ACM思维题训练集合 Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...
- CF思维联系–CodeForces -224C - Bracket Sequence
ACM思维题训练集合 A bracket sequence is a string, containing only characters "(", ")", ...
- CF思维联系–CodeForces - 223 C Partial Sums(组合数学的先线性递推)
ACM思维题训练集合 You've got an array a, consisting of n integers. The array elements are indexed from 1 to ...
- CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...
- CF思维联系– CodeForces -CodeForces - 992C Nastya and a Wardrobe(欧拉降幂+快速幂)
Nastya received a gift on New Year - a magic wardrobe. It is magic because in the end of each month ...
- P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码
题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...
- CodeForce 222C Reducing Fractions
To confuse the opponents, the Galactic Empire represents fractions in an unusual format. The fractio ...
随机推荐
- 28.5 Integer-- int的包装类
* 由于基本数据类型只能做一些简单的操作和运算,所以Java为我们封装了基本数据类型,为每种基本数据类型提供了包装类 * 包装类就是封装了基本数据类型的类,为我们提供了更多复杂的方法和一些变量 * * ...
- 21.1 Math(数学运算)方法使用 、工具类
package day21_static.meathDemo; //Math: 包含一些基本的数学运算方法 //从api中搜Math,它都用的static修饰. public class MethDe ...
- Python 应用领域及学习重点
笔者认为不管学习什么编程语言,首先要知道:学完之后在未来能做些什么? 本文将浅谈 Python 的应用领域及其在对应领域的学习重点.也仅是介绍了 Python 应用领域的"冰山一角" ...
- pandas basic cheatsheet
"胖的要死"是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. 有多大?这篇 ...
- Serval and Parenthesis Sequence CodeForces - 1153C
题目大意:一个字符串只含有? ( ),?可以变成 ) 或者 ( ,将字符串中所有的?变成) 或者 ( 使得字符串合法. 合法就是让括号配对,并且不可以提前结束比如:()()这样是不合法的. 题解:既然 ...
- 详解 Arrays类
请关注本人博文--<详解 普通数组 -- Arrays类 与 浅克隆> Arrays类: 概述: 针对数组进行操作的工具类.它提供了对于数组的值的排序.查找等功能. 现在,本人来展示一下A ...
- C# 静态变量、静态函数、实体变量、实体函数在一个类中的执行顺序
为了弄清这个代码,写了个测试,但是测试的结果和往上的代码有所差别,仁者见仁,智者见智了.如果我的测试用例用问题,欢迎指出. 首先,方法的是在被调用时执行,但是静态方法在所有地方都可以调用,应该在很早的 ...
- vue路由中 Navigating to current location ("/router") is not allowed
报错原因:多次点击同一路由,导致路由被多次添加 解决方法: router/index中添加以下代码: //router/index.js Vue.use(VueRouter) //导入vue路由 co ...
- python爬虫面试题集锦及答案
1.爬取数据后使用哪个数据库存储数据的,为什么? - 2.你用过的爬虫框架或者模块有哪些?优缺点? - 3.写爬虫是用多进程好?还是多线程好? - 4.常见的反爬虫和应对方法? - 5.需要登录的网页 ...
- spring boot连接linux服务器上的redis
本文章为给新手学习spring boot远程连通redis提供一个学习参考. 环境是intellij idea(window)+ redis(linux虚拟机-vmware). 首先在linux安装好 ...