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. P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码

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

  8. 总裁演说思维:商务谈判最经典的12个技巧

    总裁演说思维:商务谈判最经典的12个技巧 商务谈判的技巧不仅仅适用于公司与公司之间的谈判,同时也适用应聘者与公司.销售人员与顾客等.下面是小编整理了商务谈判最经典的12个技巧,供你参考. 商务谈判的技 ...

  9. CodeForces - 222C Reducing Fractions(唯一分解定理)

    题目链接:点击查看 题目大意:给出两个数组,数组a表示的是分子的因数,数组b表示的是分母的因数,求约分后的答案 题目分析:一看题目挺简单的,但是在输出的那里这个题目做了特定的要求,题目首先给出的是1e ...

最新文章

  1. Java 时间 Date类型,Long类型,String类型
  2. encode,decode
  3. 为阿里云服务器ECS实例安装Nodejs
  4. python实现离线翻译_10分钟教你用Python实现微信翻译机器人
  5. Android性能优化-App后台优化
  6. 混凝土墙开洞_易县混凝土剪力墙切割常见问题
  7. fpga arm 通讯_科学网-[转载]【电子技术】【2014】FPGA增强的数据处理系统
  8. linux查看svn信息,SVN 查看历史信息
  9. 记录如何深度拷贝一个属性存在循环引用的对象
  10. php -- PDO异常处理
  11. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
  12. 中国女性补体面膜市场趋势报告、技术动态创新及市场预测
  13. workman定时器使用
  14. 广东省教育局 计算机,广东省教育厅关于公布第十七届广东省中小学电脑制作活动获奖结果的通知...
  15. 常用的html标签及用法,html常用标签及其属性用法
  16. Mysql8.0设置允许远程连接
  17. 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路
  18. KDD 2022 | 量化交易相关论文(附论文链接)
  19. krpano 全景图在微信里面被屏蔽的解决办法
  20. “shadows a parameter“ 和 “error: expected ‘}’ at end of input”

热门文章

  1. 计算机英语词汇的特点,电子商务英语词汇都有哪些特点
  2. mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
  3. 开源NAS系统使用总结
  4. 利用反射自动封装成实体对象
  5. 转:Linux下高并发socket最大连接数所受的各种限制
  6. 用Gridview和ObjectDataSource轻松实现自定义分页
  7. A summary of the post “How I explained OOD to my wife
  8. 网络工程师需要具备哪些素质或专业技术
  9. php与mysql基础教程第二版_PHP 和 MySQL 基础教程(二)
  10. python里的join方法_python中join()方法介绍