9.20 模拟试题
请注意,所有题目使用文件输入输出。输入文件名、输出文件名前缀同题目名前缀,输入文件名后缀为.in,输出文件名后缀为.out。
例如,对于第一题,输入文件为count.in,而输出文件名为count.out。
TL、ML分别表示时间限制、内存限制。
Good Luck & Have Fun
kAc
A 约数之和(count.pas/c/cpp)
TL:1S ML:128MB
【Description】
我们用D(x)表示正整数x的约数的个数。给定一个正整数N,求D(1)+D(2)+…+D(N)。
【Input】
一行一个正整数N。
【Output】
一行一个整数,表示答案
【Sample Input】
5
【Sample Output】
10
【Hint】
样例解释:
D(1)=1 D(2)=2
D(3)=2 D(4)=3 D(5)=2
对于20%的测试数据:N<=1000
对于50%的测试数据:N<=100000
对于100%的测试数据:N<=10000000
我们先考虑一个函数f'[i],设f'[i]为i的约数的个数,那么显然f'[i]为积性函数,我们可以用线性筛得到,仔细观察可以发现f[i] = f'[1] + f'[2] + ... + f'[i],比如f[6] = f'[1]+f'[2]+...+f'[6] = 1+2+2+3+2+4 = 6+3+2+1+1+1 = 14,下面简单解释一下线性筛是如何得到一个数约数的个数的,首先根据约数个数定理:对于一个大于1的正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,则n的正约数有(a?+1)(a?+1)(a?+1)…(ak+1)个,又我们知道线性筛筛质数每次筛的都是用最小的质因子去筛,因此我们可以记录这个最小质因子唯一分解后的次幂然后通过上面的公式求解。
#include<cstdio> #include<algorithm> #define N 100001 using namespace std; bool vis[N]; int n,tot,pri[N],d[N]; long long ans,f[N],ff[N]; int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f; } int work() {ff[1]=1,f[1]=1;for(int i=2;i<=n;i++){if(!vis[i]){pri[tot++]=i;d[i]=1,ff[i]=2;}for(int j=0;j<tot&&i*pri[j]<=n;j++){vis[i*pri[j]]=true;if(i%pri[j]){ff[i*pri[j]]=ff[i]*2;d[i*pri[j]]=1;}else{ff[i*pri[j]]=ff[i]/(d[i]+1)*(d[i]+2);d[i*pri[j]]=d[i]+1;break;}} f[i]=f[i-1]+ff[i];} } int main() {freopen("count.in","r",stdin);freopen("count.out","w",stdout);n=read();work();ans=f[n];printf("%I64d\n",ans);return 0; }
50分,MLE(其实少开两个数组就可以A了的、、)
#include<cstdio> #include<algorithm> #define N 10000100 using namespace std; int n,tot,pri[N],d[N],ff[N]; long long ans; int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f; } int work() {ff[1]=1;ans=1;for(int i=2;i<=n;i++){if(!d[i]){pri[tot++]=i;d[i]=1,ff[i]=2;}for(int j=0;j<tot&&i*pri[j]<=n;j++){if(i%pri[j]){ff[i*pri[j]]=ff[i]*2;d[i*pri[j]]=1;}else{ff[i*pri[j]]=ff[i]/(d[i]+1)*(d[i]+2);d[i*pri[j]]=d[i]+1;break;}} ans+=ff[i];} } int main() {freopen("count.in","r",stdin);freopen("count.out","w",stdout);n=read();work();printf("%I64d\n",ans);return 0; }
AC代码
O(n)做法,我们枚举因子,一个因子的倍数的一个约数一定是这个因子,那么我们求出一个数的倍数的个数即为求出了所有有当前因子的数的个数
#include<cstdio> #include<algorithm> using namespace std; int n; long long ans; int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f; } int main() {freopen("count.in","r",stdin);freopen("count.out","w",stdout);n=read();for(int i=1;i<=n;i++)ans+=n/i;printf("%I64d\n",ans);return 0; }
O(n做法)
B 邮局选址(post.pas/c/cpp)
TL:1S ML:128MB
【Description】
在 J 市的一条笔直的公路旁分布着 n 个村庄,每个村庄都有一个唯一的坐标 Xi,任意一对村庄的坐标不同。最近,J 市领导计划在村庄里新建 m 个邮局,而邮局在 n个村庄里的分布情况会影响到居民的便利程度。
设 m 个邮局分别建在 P1,P2,..,Pm 号村庄。每个村庄的村民都会找到与其距离最近的一个邮局,若有多个距离最近的则会任选一个,该村庄的便利度即为该村庄与其最近的邮局的距离,而所有村庄的便利度的和即为总便利度。
严格地讲,总便利度 C定义为
现在,由你来安排邮局的建设位置。请计算最小的 C 是多少。
【Input】
第一行两个整数 n m
第二行递增的n 个整数,表示 X1..Xn
【Output】
一行一个整数,表示最小的 C
【Sample Input】
10 5
1 2 3 6 7 9 11 22 44 50
【Sample Output】
9
【Hint】
样例解释:建立在坐标为:2 7 22 44 50的位置
每个村庄的便利度分别为:1 0 1 1 0 2 4 0 0 0
对于30%的测试数据 n ≤ 10
对于60%的测试数据 n ≤ 50
对于100%的测试数据 1 ≤ n ≤ 300; 1 ≤ m ≤ 30; m ≤ n; 1 ≤ Xi ≤ 10000
dp
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define N 1000 using namespace std; bool vis[N]; long long ans=0x3f; int n,m,x[N],f[N][N],dp[N][N],q[N]; int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f; } int main() {freopen("post.in","r",stdin);freopen("post.out","w",stdout);n=read(),m=read();memset(dp,0x3f,sizeof(dp));for(int i=1;i<=n;i++)x[i]=read();for(int i=1;i<=n;i++)for(int j=i;j<=n;j++){int mid=(i+j)/2;for(int k=i;k<=j;k++)f[i][j]+=abs(x[k]-x[mid]);} //处理出只放一个邮局的情况。我们可以知道如果只让一个邮局的话,邮局的位置一定是放在中间的。 for(int i=1;i<=m;i++)dp[i][i]=0;//如果在当期点放邮局的话,那当前的最短距离为0 for(int i=1;i<=n;i++)//在i这个地方放邮局的话 {dp[i][1]=f[1][i]; //放一个邮局且放在当前点的话最终值为从第一个点到当前点的便利度 for(int j=2;j<=min(m,i);j++)//枚举到当前点放几个邮局 {if(i==j) continue;dp[i][j]=dp[i-1][j-1];for(int k=j-1;k<=i;k++)dp[i][j]=min(dp[i][j],dp[k][j-1]+f[k+1][i]);//枚举上一个放邮局的地方 } } ans=dp[n][m];printf("%I64d",ans);return 0; }
dp
C 分数(fraction.pas/c/cpp)
TL:2S ML:128MB
【Description】
在一门叫做计算机应用数学的神奇的课上,老师教给大家如何处理小数的进制转换:
p进制的小数abc.def的十进制值为:。
例如十进制数在十进制下小数表示为0.33333…,在三进制下为0.1,在三十进制下为0.A。(这里A的含义与十六进制中A的含义相同,均表示10)。
下课后,老师要求kAc将N个十进制的分数写成k进制下的小数。然而kAc发现,很多十进制分数根本不可能写成有限的k进制小数!这令他十分不爽,不过他想知道,最小需要几进制才能使得这些十进制分数在该进制下均为有限的小数。
【Input】
第一行两个整数N
接下来N行,每行两个整数a, b,表示一个十进制小数
【Output】
一个整数,表示最小进制数。这里,请按照十六进制输出,所有字母全部大写。(例如,如果答案为十进制下26,则输出1A)。
【Sample Input】
2
3 99
1 99
1 11
【Sample Output】
21
【Hint】
样例解释:
在33进制下,可以表示为0.1,可以表示为0.0B,可以表示为0.3。
可以证明不存在更小的进制,使得他们均为有限小数。
对于20%的测试数据:n=1
对于50%的测试数据:n<=10,a, b <= 10000,保证最终答案在十进制下不超过10000。
对于70%的测试数据:n<=100,a, b<= 10000。
对于100%的测试数据:n<=1000,1 <= a,b <= 1000000000。
弃疗,完全没有心情看了。。。
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #define pz putchar('0'); #include <map> using namespace std; const int MO = 15; struct Big{int len, data[10001];void clear() { memset(this, 0, sizeof(*this)); }int & operator [] (int k) { return data[k]; }Big & operator = (int k){clear();len = 0;while(k){++len; data[len] = k & MO; k >>= 4;} if (len == 0) ++len;return *this;}Big operator * (Big & A){Big temp; temp.clear(); temp.len = len + A.len - 1;for (int i = 1; i <= len; i++)for (int j = 1; j <= A.len; j++){temp[i + j - 1] += A[j] * data[i];temp[i + j] += (temp[i + j - 1] >> 4);temp[i + j - 1] &= MO;}while(temp[temp.len + 1]) ++temp.len;return temp;}void print(){for (int i = len; i >= 1; i--) printf("%X", data[i]);putchar('\n');} } temp, ans; map<int, bool> M; bool f[1000001]; int pnum, p[100001]; void GETP(int M) {memset(f, 1, sizeof(f)); f[0] = f[1] = false;p[pnum = 1] = 2;for (int now = 2; now < M;){for (int j = now + now; j <= M; j += now) f[j] = false;++now; while(now < M && !f[now]) ++now;if (f[now]) p[++pnum] = now;} } int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } void work(int num) {for (int i = 1; i <= pnum; i++){if (num % p[i] == 0)if (M[p[i]] == 0){M[p[i]] = true;temp = p[i];ans = ans * temp;}while(num % p[i] == 0) num /= p[i];}if (num != 1)if (M[num] == 0){M[num] = true;temp = num;ans = ans * temp;} } int main() {freopen("fraction.in", "r", stdin); freopen("fraction.out", "w", stdout);ans = 1;int t; scanf("%d", &t);GETP(100000);while(t--){int a, b;scanf("%d%d", &a, &b);int d = gcd(a, b); a /= d; b /= d;work(b);}ans.print(); }
粘个标程
转载于:https://www.cnblogs.com/z360/p/7561691.html
9.20 模拟试题相关推荐
- 一般而言计算机软件是指(,2012年计算机一级考试模拟试题及参考答案(20)
2012年计算机一级考试模拟试题及参考答案(20) 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 [856]要将在Windows的其他软件环境中制作的图片复制到当前WORD文档中 ...
- 计算机考试批处理试题,2015计算机三级考试pc技术模拟试题及答案(八)
2015计算机三级考试pc技术模拟试题及答案(八) 1.关于Windows 98中的网上邻居的相关叙,( )是错误的. A.通过网上邻居可以游览和使用网上的全部计算机资源 B.通过网上邻居可以浏览网上 ...
- 计算机一级在线模拟试题,计算机一级模拟试题带答案
计算机一级模拟试题带答案 计算机考试分为四个等级,不同等级的内容不同,那么百分网小编为大家提供的是关于计算机一级的模拟考试题,希望能为各位考生的复习提供帮助! 一.判断正误题,正确填A,错误填B(共2 ...
- 唐朔飞计算机组成原理pdf_唐朔飞计算机组成原理第2版配套题库名校考研真题课后答案资料课后习题章节题库模拟试题...
唐朔飞<计算机组成原理>(第2版)配套题库[名校考研真题+课后习题+章节题库+模拟试题] 第一部分 名校考研真题 2015年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业 ...
- 部队文职计算机试题,2020军队文职人员考试:计算机基础模拟试题(1)
[导语]2020年军队文职备考进行中,为助力各位考生做好2020年军队文职招聘考试准备,山东中公教育小编为大家整理了考试题库:2020军队文职人员考试:计算机基础模拟试题(1),供大家学习和参考. 1 ...
- 计算机应用基础的答案2015,2015年《计算机应用基础》模拟试题及答案(一)
2015年<计算机应用基础>模拟试题及答案(一) 31.求Y的绝对值,并将所求得的值赋给变量B的表达式为( B ) A.B=INT(Y) B.B=ABS(Y) C.B=CINT(Y) D. ...
- 计算机基础知识考试模拟试题,计算机基础知识模拟试题及答案
计算机基础知识模拟试题及答案 1.下列四个无符号十进制整数中,能用八个二进制位表示的是__________. A.257 B.201 C.313 D.296 2.下列关于系统软件的四条叙述中,正确的一 ...
- 计算机网络2004(模拟试题),中国矿业大学2003—2004学年(计算机网络)模拟试题 A卷...
中国矿业大学2003-2004学年(计算机网络)模拟试题 A卷 中国矿业大学2003-2004学年第一学期函授夜大学 <计算机网络>模拟试题(A卷)(开一页) 站点:_大屯_专业年级:__ ...
- c语言中isnarc变量,C语言 二级 1-40上机模拟试题答案.doc
C语言 二级 1-40上机模拟试题答案 1~40套模拟试题的简单应用和综合应用的答案 一: 2(1): index n n+2 n f1 2(2): s s,s1 <> str(n) 3: ...
最新文章
- PHP 中 include 和 require 的概要及区别介绍
- lucene Hello World
- 新版本springboot-springboot与springcloud理解误区
- java虚拟机内存模型种类_深入理解volatile类型——从Java虚拟机内存模型角度
- Struts tiles入门(最最简单的例子)
- 会赚钱的教师才是好教师
- 完美卸载SQL Server 2008的方案
- SpringBoot上传文件到后端服务器
- 小电托——1-1磁路的基本概念和基本定律
- python基础知识学习
- win7电脑桌面背景异常
- 旷视首席科学家孙剑:10年扎在书堆里,13年磨砺成首席
- 数据压缩——LZW 编解码算法实现与分析
- 再论凭中学数学常识发现中学数学一系列重大错误——数列最起码常识让5千年都无人能识的自然数一下子暴露出来
- 硬盘smart健康深度检测工具——WGCLOUD
- 7个免费的云平台,快来发布你的项目吧
- 怎么在微信小程序中设置密码重置
- 高级程序设计语言的共性内容
- 简单到出人意料的CNN图像分类策略
- [Python]小工具:将文件夹下多格式图片自动移动到指定位置
热门文章
- 【PE】手动给PE文件添加一段代码MessageBoxA
- 机器学习2/100天-简单线性回归
- python接口自动化(三十四)-封装与调用--函数和参数化(详解)
- 歌浏览器的各个版本对应的webdriver(chromedrive)-超级详细
- 超实用的微信图片转换工具
- [Ext JS 7]7.6 内存泄露及处理
- SQL Developer 使用问题与解决方法汇总
- java calendar clear_java.util.Calendar clear()方法
- 2019新悦动打火困难解决了吗_悦动大面积存在启动困难北京现代检查不出原因就换零件...
- E. 2-3-4 Tree