训练指南第二章-基础问题 P170

2 / 4 Problem A UVA 10943 How do you add?
1 / 2 Problem B UVA 10780 Again Prime? No Time.
1 / 1 Problem C UVA 10892 LCM Cardinality
1 / 4 Problem D UVA 11752 The Super Powers
1 / 3 Problem E UVA 11076 Add Again
1 / 1 Problem F UVA 11609 Teams
1 / 3 Problem G POJ 2402 Palindrome Numbers(LA2889)
1 / 1 Problem H UVA 11489 Integer Game
1 / 6 Problem I UVA 10791 Minimum Sum LCM
1 / 1 Problem J UVA 11461 Square Numbers
1 / 2 Problem K UVA 11388 GCD LCM
1 / 2 Problem L UVA 11889 Benefit
1 / 1 Problem M UVA 1319 Maximum
1 / 1 Problem N UVA 1315 Crazy tea party

UVA 11388 GCD LCM

显然在合理的情况下,a=G,b=L

#include <bits/stdc++.h>int main() {int T;scanf ("%d", &T);while (T--) {int g, l;scanf ("%d%d", &g, &l);long long f = 1ll * g * l;if (l < g || l % g != 0) {puts ("-1");} else {printf ("%d %d\n", g, l);}}return 0;
}

UVA 11889 Benefit

解法一:分解质因数,因为,,,所以在ai小于最大值时bi为最大值,否则为0.

解法二:数学方法,tb=C/A,当g=GCD(A, tb) != 1,a /= g. tb *= .(不是很懂)

#include <bits/stdc++.h>void get_prime(int n, std::map<int, int> &mp) {int m = (int) sqrt (n + 0.5);for (int i=2; i<=m; ++i) {if (n % i == 0) {int cnt = 0;while (n % i == 0) {n /= i;mp[i]++;}}}if (n != 1) {mp[n]++;}
}int _pow(int x, int n) {int ret = 1;while (n) {if (n & 1) {ret = ret * x;}n >>= 1;x = x * x;}return ret;
}int solve(int a, int c) {std::map<int, int> mpa, mpc;get_prime (a, mpa);get_prime (c, mpc);int na = mpa.size (), nc = mpc.size ();if (na > nc || c % a != 0) {return -1;} else {int ret = 1;int m = (int) sqrt (c + 0.5);std::map<int, int>::iterator it;for (it=mpc.begin (); it!=mpc.end (); ++it) {if (!mpa.count (it->first) || mpa[it->first] < it->second) {ret *= _pow (it->first, it->second);}}return ret;}
}int main() {int T;scanf ("%d", &T);while (T--) {int a, c;scanf ("%d%d", &a, &c);int ans = solve (a, c);if (ans != -1) {printf ("%d\n", ans);} else {puts ("NO SOLUTION");}}return 0;
}

#include <bits/stdc++.h>int GCD(int a, int b) {return b ? GCD (b, a % b) : a;
}int solve(int a, int c) {if (a > c || c % a != 0) {return -1;}int tb = c / a;int g = GCD (a, tb);int mul = 1;while (g != 1) {mul *= g;a /= g;g = GCD (a, tb);}return tb * mul;
}int main() {int T;scanf ("%d", &T);while (T--) {int a, c;scanf ("%d%d", &a, &c);int ans = solve (a, c);if (ans != -1) {printf ("%d\n", ans);} else {puts ("NO SOLUTION");}}return 0;
}

UVA 10943 How do you add?

这个用隔板法,

#include <bits/stdc++.h>int binom[205][205];
const int MOD = 1000000;void init_binom() {for (int i=1; i<=200; ++i) {binom[i][0] = binom[i][i] = 1;for (int j=1; j<i; ++j) {binom[i][j] = binom[i-1][j-1] + binom[i-1][j];if (binom[i][j] >= MOD) {binom[i][j] -= MOD;}}}
}int main() {init_binom ();int n, k;while (scanf ("%d%d", &n, &k) == 2) {if (!n && !k) {break;}printf ("%d\n", binom[n+k-1][k-1]);}return 0;
}

UVA 10780 Again Prime? No Time.

分解质因数,取n!与m的某个质因数的个数商最小值。n!的某个质因数的个数=

#include <bits/stdc++.h>int main() {int T;scanf ("%d", &T);for (int cas=1; cas<=T; ++cas) {int m, n;scanf ("%d%d", &m, &n);int ans = 0x3f3f3f3f;int i = 2;while (m != 1) {int cnt = 0;while (m % i == 0) {cnt++;m /= i;}if (cnt) {int nn = n;int cnt2 = 0;while (nn) {cnt2 += nn / i;nn /= i;}ans = std::min (ans, cnt2 / cnt);}i++;}printf ("Case %d:\n", cas);if (ans) {printf ("%d\n", ans);} else {puts ("Impossible to divide");}}return 0;
}

UVA 10892 LCM Cardinality

分解质因数,暴力枚举~

#include <bits/stdc++.h>typedef long long ll;int GCD(int a, int b) {return b ? GCD (b, a % b) : a;
}ll LCM(int a, int b) {return 1ll * a / GCD (a, b) * b;
}int main() {int n;while (scanf ("%d", &n) == 1) {if (!n) {break;}std::vector<int> vec;int m = (int) sqrt (n + 0.5);for (int i=1; i<=m; ++i) {if (n % i == 0) {if (i != n / i) {vec.push_back (i);vec.push_back (n / i);} else {vec.push_back (i);}}}int ans = 1; //n nfor (int i=0; i<vec.size (); ++i) {for (int j=i+1; j<vec.size (); ++j) {if (LCM (vec[i], vec[j]) == n) {ans++;}}}printf ("%d %d\n", n, ans);}return 0;
}

UVA 11752 The Super Powers

只要指数不是素数才可以符合条件,技巧:取对数来求最大的指数

#include <bits/stdc++.h>typedef unsigned long long ull;
int nprime[105];bool is_prime(int n) {int m = (int) sqrt (n + 0.5);for (int i=2; i<=m; ++i) {if (n % i == 0) {return false;}}return true;
}ull _pow(ull x, int n) {ull ret = 1;while (n) {if (n & 1) {ret = ret * x;}n >>= 1;x *= x;}return ret;
}int main() {int tot = 0;for (int i=4; i<=64; ++i) {if (!is_prime (i)) {nprime[tot++] = i;}}std::map<ull, bool> mp;int bound = (1 << 16);for (int i=2; i<=bound; ++i) {double maxn = log (pow (2.0, 64.0)-1) / log (i);for (int j=0; j<tot; ++j) {int n = nprime[j];if (n >= maxn) {break;}mp[_pow ((ull) i, n)] = true;}}mp[1] = true;std::map<ull, bool>::iterator it;for (it=mp.begin (); it!=mp.end (); ++it) {printf ("%llu\n", it->first);}return 0;
}

UVA 11076 Add Again

设有重复元素的全排列数为x,,所以,不考虑位置的话,总和为,然后考虑进位累加的问题。

#include <bits/stdc++.h>typedef unsigned long long ull;int main() {int a[13], cnt[15];ull f[13];f[0] = f[1] = 1;for (int i=2; i<=12; ++i) {f[i] = f[i-1] * i;}int n;while (scanf ("%d", &n) == 1) {if (!n) {break;}memset (cnt, 0, sizeof (cnt));int m = 0;for (int i=1; i<=n; ++i) {int x;scanf ("%d", &x);if (!cnt[x]) {a[m++] = x;}cnt[x]++;}ull sum = 0;for (int i=0; i<m; ++i) {ull div = f[cnt[a[i]]-1];for (int j=0; j<m; ++j) {if (i != j) {div *= f[cnt[a[j]]];}}sum += f[n-1] / div * a[i];}//printf ("$%llu\n", sum);ull ans = 0;for (int i=1; i<=n; ++i) {ans += sum;sum *= 10;}printf ("%llu\n", ans);/*ull tmp = 0;std::vector<ull> ans;for (int i=1; i<=n; ++i) {ans.push_back ((sum + tmp) % 10);tmp = (sum + tmp) / 10;}if (tmp) {printf ("%llu", tmp);}for (int i=ans.size ()-1; i>=0; --i) {printf ("%llu", ans[i]);}puts ("");*/}return 0;
}

UVA 11609 Teams

#include <bits/stdc++.h>const int MOD = 1e9 + 7;int pow_mod(int x, int n) {int ret = 1;while (n) {if (n & 1) {ret = 1ll * ret * x % MOD;}n >>= 1;x = 1ll * x * x % MOD;}return ret;
}int main() {int T;scanf ("%d", &T);for (int cas=1; cas<=T; ++cas) {int n;scanf ("%d", &n);printf ("Case #%d: %d\n", cas, 1ll * pow_mod (2, n - 1) * n % MOD);}return 0;
}

POJ 2402 Palindrome Numbers(LA2889)

按照回文串长度分组,找到是第n/num[i]+1组的第n%num[i]-1个位置,因为每组都从1000...0001开始,很容易找到规律。

#include <bits/stdc++.h>typedef long long ll;
ll num[32];ll tenp(int m) {ll ret = 1;while (m--) {ret *= 10;}return ret;
}int main() {ll s = 9;num[1] = num[2] = s;for (int i=3; i<31; i+=2) {s *= 10;num[i] = num[i+1] = s;}int n;while (scanf ("%d", &n) == 1) {if (!n) {break;}int i;for (i=1; i<32 && n > num[i]; ++i) {n -= num[i];}int l = i / 2 + (i & 1);ll x = tenp (l - 1) + n - 1;printf ("%I64d", x);if (i & 1) {x /= 10;}while (x) {printf ("%d", x % 10);x /= 10;}puts ("");}return 0;
}

UVA 11489 Integer Game

除了第一次特判外,接下来只能取3,6,9(保证剩余数字是3的倍数),判断奇偶就可以了。

#include <bits/stdc++.h>const int N = 1e3 + 5;
char str[N];
int cnt[10];bool judge() {memset (cnt, 0, sizeof (cnt));int sum = 0;for (int i=0; str[i]; ++i) {sum += str[i] - '0';cnt[str[i]-'0']++;}bool flag = false;int t = sum % 3;for (int i=t; i<10; i+=3) {if (cnt[i]) {cnt[i]--;flag = true;break;}}if (!flag) {return false;}int tot = cnt[3] + cnt[6] + cnt[9];return !(tot & 1);
}int main() {int T;scanf ("%d", &T);for (int cas=1; cas<=T; ++cas) {scanf ("%s", str);printf ("Case %d: %c\n", cas, judge () ? 'S' : 'T');}return 0;
}

UVA 10791 Minimum Sum LCM

这题题目说的是set集合,不仅仅只是两个数字,结论是所有数字两两互质时最小,即分解质因数后,求

#include <bits/stdc++.h>long long solve(int n) {long long ret = 0;int cnt = 0;int m = (int) sqrt (n + 0.5);int nn = n;for (int i=2; i<=m; ++i) {if (n % i == 0) {cnt++;long long tmp = 1;while (n % i == 0) {n /= i;tmp *= i;}ret += tmp;}}if (!cnt || (cnt == 1 && n == 1)) {return 1ll + nn;} else {if (n != 1) {ret += n;}return ret;}
}int main() {int n, cas = 0;while (scanf ("%d", &n) == 1) {if (!n) {break;}printf ("Case %d: %lld\n", ++cas, solve (n));}return 0;
}

UVA 11461 Square Numbers

前缀思想

#include <bits/stdc++.h>const int N = 1e5 + 5;
int sum[N];bool ok(int n) {int m = (int) sqrt (n);return m * m == n;
}void init() {sum[0] = 0;for (int i=1; i<=100000; ++i) {sum[i] = sum[i-1];if (ok (i)) {sum[i]++;}}
}int main() {init ();int a, b;while (scanf ("%d%d", &a, &b) == 2) {if (!a && !b) {break;}printf ("%d\n", sum[b] - sum[a-1]);}return 0;
}

UVA 1319 Maximum

都乘以。因为p是偶数,贪心思想一些数取-1,一些取a,还有一个在范围内。

#include <bits/stdc++.h>typedef long long ll;int main() {int m, p, a, b;while (scanf ("%d%d%d%d", &m, &p, &a, &b) == 4) {int sum = a * b;int x = 0, y = 0;for (int i=1; i<m; ++i) {if (sum >= a) {sum -= a;x++;} else {sum++;y++;}}double sa = sqrt (a * 1.0);double ans = y / pow (sa, p) + x * pow (sa, p);ans += pow (sum / sa, p);printf ("%d\n", (int) (ans + 0.5));}return 0;
}

UVA 1315 Crazy tea party

找规律,靠近1的往1挪,靠近n的往n挪。

#include <bits/stdc++.h>int main() {int T;scanf ("%d", &T);while (T--) {int n;scanf ("%d", &n);int m = (n - 1) / 2;int ans = (1 + m) * m;if (n & 1) {ans -= m;}printf ("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/Running-Time/p/5527575.html

训练指南第二章-基础问题相关推荐

  1. Java7并发编程指南——第二章:线程同步基础

    Java7并发编程指南--第二章:线程同步基础 @(并发和IO流) Java7并发编程指南第二章线程同步基础 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCo ...

  2. Python精确指南——第二章 界面开发

    2 Python GUI 借助Python语言的优势,使用Python的界面库开发界面程序,开发周期更短.但因为Python的界面开发库底层实现一般不是Python,只是为Python封装的接口,所以 ...

  3. Kotlin学习笔记 第一章开始 第二章 基础

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 本系列为参考Kotlin中文文档 https://download.csdn.net/dow ...

  4. 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询

    [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 文章目录 [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 一.基础函数 二.聚合函数 1.COUNT 2.MAX/M ...

  5. Unix/Linux下的Curses库开发指南——第二章 curses库I/O处理

    第2章 curses库I/O处理 2.1 curses库简介 curses库是curses开发包中最重要的一个库,其中提供了一些基本的屏幕操作函数,包括输入/输出,屏幕初始化,屏幕处理中断以及窗口的创 ...

  6. ZeroMQ 中文指南 第二章 ZeroMQ进阶【转载】

    此文章转载自GitHub : https://github.com/anjuke/zguide-cn 作者信息如下. ZMQ 指南 作者: Pieter Hintjens ph@imatix.com, ...

  7. 计算机第二章基础知识习题,计算机基础知识习题.docx

    文档介绍: 第一章计算机基础知识****题一.单项选择题2.最先实现存储程序的计算机是B.A.ENIACB.EDSACC.EDVACD.VNIVA4.开机时显示如下出错信息的含义是B.Non-syst ...

  8. 游戏感:虚拟感觉的游戏设计师指南——第二章 游戏感与人类感知能力

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第二章游戏感与人类感知 ...

  9. Vert.x Java开发指南——第二章 使用Vert.x编写最小可用Wiki

    第二章 使用Vert.x编写最小可用Wiki 版权声明:本文为博主自主翻译,转载请标明出处. https://blog.csdn.net/elinespace/article/details/8037 ...

最新文章

  1. Transformer又来搞事情!百万像素高清图轻松合成,效果迷人
  2. Linux 文件大小 文件夹大小 磁盘大小
  3. 2020-12-11 图片格式互转:base64、PIL Image opencv cv2互转
  4. 五种网络管理技巧优化网络办公环境
  5. kafka安装、配置、启动、常用命令及shell启动脚本编写
  6. C++以螺旋方式打印m * n矩阵的算法(附完整源码)
  7. socket , 套接口还是套接字,傻傻分不清楚
  8. qt找不到打印机_Qt无法调起打印机问题(QPrintDialog: Cannot be used on non-native printers)解决...
  9. iTerm2 for MacOS(终端模拟器/终端仿真器/命令终端工具)设置详解
  10. python中ans的用法_python cx_Oracle基础使用方法
  11. Docker核心技术之联合文件系统
  12. linux使用jinja2模板_linux下安装python组件之jinja2
  13. 深交所与6家股交中心深化区块链合作
  14. [转载]共享软件的注册加密法
  15. 压缩JavaScript的宏
  16. Unity3d学习之路-初识GameSparks多人游戏插件
  17. 【MODIS数据处理#11】例六:绘制NDVI多年变化趋势空间分布图
  18. 七个好用且免费的在线代码编辑器,你喜欢哪个?
  19. QT实现的自定义按键精灵
  20. 江南大学计算机科学考研书目,2019江南大学计算机考研初试科目、参考书目、复试线...

热门文章

  1. 图书商城:购物车模块
  2. python3数据库表关联_Django中数据库操作|python3教程|python入门|python教程
  3. l298n电机哪一端为正_L298N控制直流电机正反转_张天鹏
  4. xctf php2,XCTF PHP2
  5. 南邮java大作业实验报告_南京邮电大学java第三次实验报告
  6. Zabbix的web界面基本操作
  7. java 数组json_如何在Java中创建JSON数组
  8. 用yum安装配置搭建lamp环境--超简单!
  9. php 23种设计模型 - 装饰模式
  10. qq推广 qq在线客服工具