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(数学+有技巧的枚举)的更多相关文章

  1. CF思维联系--CodeForces - 218C E - Ice Skating (并查集)

    题目地址:24道CF的DIv2 CD题有兴趣可以做一下. ACM思维题训练集合 Bajtek is learning to skate on ice. He's a beginner, so his ...

  2. CF思维联系– CodeForces - 991C Candies(二分)

    ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...

  3. CF思维联系–CodeForces - 225C. Barcode(二路动态规划)

    ACM思维题训练集合 Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...

  4. CF思维联系–CodeForces -224C - Bracket Sequence

    ACM思维题训练集合 A bracket sequence is a string, containing only characters "(", ")", ...

  5. 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 ...

  6. CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)

    ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...

  7. 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 ...

  8. P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码

    题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...

  9. CodeForce 222C Reducing Fractions

    To confuse the opponents, the Galactic Empire represents fractions in an unusual format. The fractio ...

随机推荐

  1. 家庭记账本app进度之对于登录和注册两个界面点击按钮的相互跳转

    这次主要完成了两个两个android页面之间的跳转.从登录页面点击注册就会跳转到注册页面.在注册页面点击返回登录,这样就可以返回到登录界面.主要是这样的操作.其中遇到了一个困难主要是当点击按钮的时候, ...

  2. 如何提高你使用windows的逼格(windows用成Linux的赶脚)

    一.准备工作 作为一个整洁而有内涵的人,电脑桌面一定要清洁 二.桌面整洁了,软件怎么打开呢?     方案一 方案二.敲重点   我们可以使用终端指令打开windows安装的任意软件: 打开Windo ...

  3. codeforces 122C perfect team

    You may have already known that a standard ICPC team consists of exactly three members. The perfect ...

  4. ubuntu允许root远程登录

    之前说了,怎么设置root用户登录,但是使用Xshell等工具操作Ubuntu,用户登录不进去,原因很简单,没有开启root登录的权限. 1.检查ssh服务是否开启 使用以下命令,查看是否开启 ps ...

  5. python3购物车

    python3实现购物车小程序,优化后将程序分成函数,用文件注册和验证用户名密码. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 20 ...

  6. 详解 缓冲区(Buffer 抽象类)

    在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...

  7. 6. 浅谈super

    this和super: super( ) EX6类的继承, 在react中官方固定应用 在java面向对象思想中这样定义: this表示当前对象,this()为当前对象的其他构造函数 super表示父 ...

  8. 【题解】P2024 [NOI2001]食物链 - 数据结构 - 并查集

    P2024 [NOI2001]食物链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 动物王国中有三类动物 \(A,B ...

  9. Python 七步捉虫法

    了解一些技巧助你减少代码查错时间. -- Maria Mckinley 在周五的下午三点钟(为什么是这个时间?因为事情总会在周五下午三点钟发生),你收到一条通知,客户发现你的软件出现一个错误.在有了初 ...

  10. RESTFul 设计规范

    REST这个词,是Roy Thomas Fielding博士在他2000年提出的,有兴趣的可以阅读一下他的论文, 论文地址为:http://www.ics.uci.edu/~fielding/pubs ...