ACM题目与答案---J

合集下载

大学ACM考试题目及作业答案整理

大学ACM考试题目及作业答案整理

ACM作业与答案整理1、平面分割方法:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。

#include <iostream.h>int f(int n){if(n==1) return 2;else return f(n-1)+2*(n-1);}void main(){int n;while(1){cin>>n;cout<<f(n)<<endl;}}2、LELE的RPG难题:有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.编程全部的满足要求的涂法.#include<iostream.h>int f(int n){if(n==1) return 3;else if(n==2) return 6;else return f(n-1)+f(n-2)*2;}void main(){int n;while(1){cin>>n;cout<<f(n)<<endl;}}3、北大ACM(1942)Paths on a GridTime Limit: 1000MS Memory Limit: 30000K DescriptionImagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastered years ago (this time he's explaining that (a+b)2=a2+2ab+b2). So you decide to waste your time with drawing modern art instead.Fortunately you have a piece of squared paper and you choose a rectangle of size n*m on the paper. Let's call this rectangle together with the lines it contains a grid. Starting at the lower left corner of the grid, you move your pencil to the upper right corner, taking care that it stays on the lines and moves only to the right or up. The result is shown on the left:Really a masterpiece, isn't it? Repeating the procedure one more time, you arrive with the picture shown on the right. Now you wonder: how many different works of art can you produce?InputThe input contains several testcases. Each is specified by two unsigned 32-bit integers n and m, denoting the size of the rectangle. As you can observe, the number of lines of the corresponding grid is one more in each dimension. Input is terminated by n=m=0.OutputFor each test case output on a line the number of different art works that can be generated using the procedure described above. That is, how many paths are there on a grid where each step of the path consists of moving one unit to the right orone unit up? You may safely assume that this number fits into a 32-bit unsigned integer.Sample Input5 41 10 0Sample Output1262#include<iostream>using namespace std;longlong f(long long m, long long n){if(n==0) return 1;else return f(m-1,n-1)*m/n;}int main(){longlongm,n;while(scanf("%I64d %I64d",&n,&m) &&n+m){printf("%I64d\n",f(m+n,min(m,n)));}return 0;}1、(并查集)若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

ACM题库完整版

ACM题库完整版

#include<stdio.h> int type(int); char week[7][10]={"saturday","sunday","monday","tuesday","wednesday","thursday","friday"}; int year[2]={365,366}; int month[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31}; int main(void) { int days,dayofweek; int i=0,j=0; while(scanf("%d",&days)&&days!=-1) { dayofweek=days%7; for(i=2000;days>=year[type(i)];i++) days-=year[type(i)]; for(j=0;days>=month[type(i)][j];j++) days-=month[type(i)][j]; printf("%d-%02d-%02d%s\n",i,j+1,days+1,week[dayofweek]); } return 0; } int type(int m) { if(m%4!=0||(m%100==0&&m%400!=0)) return 0; else return 1; }
登山
1.题目描述 五一到了,NUIST-ACM队组织大家去登 山观光,队员们发现山上一个有N个景点, 并且决定按照顺序来浏览这些景点,即 每次所浏览景点的编号都要大于前一个 浏览景点的编号。同时队员们还有另一 个登山习惯,就是不连续浏览海拔相同 的两个景点,并且一旦开始下山,就不 再向上走了。队员们希望在满足上面条 件的同时,尽可能多的浏览景点,你能 帮他们找出最多可能浏览的景点数么? 2.输入 Line 1: N (2 <= N <= 1000) 景点数 Line 2: N个整数,每个景点的海拔 3.输出 最多能浏览的景点数 4.样例输入 8 186 186 150 200 160 130 197 220 5.样例输出 4

计算机acm试题及答案

计算机acm试题及答案

计算机acm试题及答案一、选择题1. 在计算机科学中,ACM代表什么?A. 人工智能与机器学习B. 计算机辅助制造C. 计算机辅助设计D. 国际计算机学会答案:D2. 下列哪个不是计算机程序设计语言?A. PythonB. JavaC. C++D. HTML答案:D3. 在计算机系统中,CPU代表什么?A. 中央处理单元B. 计算机辅助设计C. 计算机辅助制造D. 计算机辅助教学答案:A二、填空题1. 计算机的内存分为__________和__________。

答案:RAM;ROM2. 在编程中,__________是一种用于存储和操作数据的数据结构。

答案:数组3. 计算机病毒是一种__________,它能够自我复制并传播到其他计算机系统。

答案:恶意软件三、简答题1. 请简述计算机操作系统的主要功能。

答案:计算机操作系统的主要功能包括管理计算机硬件资源,提供用户界面,运行应用程序,以及控制其他系统软件和应用软件的运行。

2. 什么是云计算,它与传统的本地计算有何不同?答案:云计算是一种通过互联网提供计算资源(如服务器、存储、数据库、网络、软件等)的服务模式。

与传统的本地计算相比,云计算允许用户按需获取资源,无需购买和维护物理硬件,具有更高的灵活性和可扩展性。

四、编程题1. 编写一个程序,计算并输出从1到100(包括1和100)之间所有偶数的和。

答案:```pythonsum = 0for i in range(1, 101):if i % 2 == 0:sum += iprint(sum)```2. 给定一个字符串,编写一个函数,将字符串中的所有字符按ASCII 码值排序并返回。

答案:```pythondef sort_string(s):return ''.join(sorted(s))```五、论述题1. 论述计算机硬件和软件之间的关系及其对计算机系统性能的影响。

答案:计算机硬件是计算机系统的物质基础,包括CPU、内存、硬盘等,而软件则是运行在硬件上的程序和数据。

ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试

ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试

ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试第一题:梦境是虚幻吗?时间限制:3000ms 内存限制:65535KB 难度:★★描述《盗梦空间》是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中的时间过得快得多,这里假设现实中的3分钟,在梦里就是1小时。

然而,Cobb他们利用强效镇静剂,可以从第一层梦境进入第二层梦境,甚至进入三层,四层梦境,每层梦境都会产生同样的时间加速效果。

那么现在给你Cobb在各层梦境中经历的时间,你能算出现实世界过了多长时间吗?比如,Cobb先在第一层梦境待了1个小时,又在第二层梦境里待了1天,之后,返回第一层梦境之后立刻返回了现实。

那么在现实世界里,其实过了396秒(6.6分钟)输入第一行输入一个整数T(0<=T<=100),表示测试数据的组数。

每组测试数据的第一行是一个数字M(3<=M<=100)随后的M行每行的开头是一个字符串,该字符串如果是"IN" 则Cobb向更深层的梦境出发了,如果是字符串"OUT"则表示Cobb从深层的梦回到了上一层。

如果是首字符串是"STAY"则表示Cobb在该层梦境中停留了一段时间,本行随后将是一个整数S表示在该层停留了S分钟(1<=S<=10000000)。

数据保证在现实世界中,时间过了整数秒。

输出对于每组测试数据,输出现实世界过的时间(以秒为单位)。

样例输入16INSTAY 60INSTAY 1440OUTOUT样例输出396测试输入106INSTAY 60INSTAY 1440OUTOUT6INININOUTOUTOUT7INININSTAY 0 OUTOUTOUT2INSTAY 203INSTAY 0 OUT3INSTAY 10 OUT4INSTAY 10 STAY 10 OUT5INSTAY 20 STAY 20 OUT STAY 120 10INSTAY 20 STAY 20 INSTAY 1440STAY 1440OUTSTAY 120OUTSTAY 11STAY 50测试输出39660306073209723000参考代码:#include<stdio.h>int main(){int n;char a[5];scanf("%d",&n);while(n--){int m,i,b=1,c,time=0;scanf("%d",&m);for(i=0;i<m;i++){scanf("%s",&a);if(a[0]=='I') b*=20;else if(a[0]=='S') {scanf("%d",&c);time+=c*60/b;} else if(a[0]=='O') b/=20;}printf("%d\n",time);}return 0;}第二题:独木舟过河时间限制:3000ms 内存限制:65535KB 难度:★★描述进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。

ACM题目及答案

ACM题目及答案

Qwertyuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiopasdfgh jklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzxc vbnmqwertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwertyuiopa sdfghjklzxcvbnmqwertyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyuio zxcvbnmqwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmrtyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyuio pasdfghjklzxcvbnmqwertyuiopasdfghj Sincisco ACM 答案 2010/11/10 Sincisco 小组成员排球队员站位问题i【题目】排球队员站位问题┏━━━━━━━━┓图为排球场的平面图,其中一、二、三、四、五、六为位置编号,┃┃二、三、四号位置为前排,一、六、五号位为后排。

某队比赛时,┃┃一、四号位放主攻手,二、五号位放二传手,三、六号位放副攻┠──┬──┬──┨手。

队员所穿球衣分别为1,2,3,4,5,6号,但每个队┃ 四│ 三│ 二┃员的球衣都与他们的站位号不同。

ACM试题及参考答案

ACM试题及参考答案

1. 给定一个矩阵M(X, Y),列集为X ,行集为Y 。

如果存在对其列的一个排序,使得每一行的元素都严格递增,称M 是一个次序保持矩阵。

例如下图中存在一个排序x 4,x 1,x 2,x 3,x 5I ⊆X ,满足:子矩阵M(I,Y)是次序保持矩阵。

[测试数据] 矩阵M :[测试数据结果] I={ x 1,x 3,x 4,x 7,x 8}[解题思路] 将该问题归约为在一个有向图中找一条最长路径的问题。

给定矩阵M=(a ij ),行集Y ,列集X ,行子集J ⊆Y ,定义有向图D A =(V A ,E A ),其中V A 含有|X|个顶点,每个顶点代表X 中的一列,如果顶点u ,v 对应的列x u ,x v 满足,对于任意的j ∈J ,u v ij ij a a <,则有一条从u 到v 的弧(u ,v )∈E 。

显然,D A 是个无环图,可以在O(|X|2)时间内构造完毕。

对于任意的条件子集J ,A(I,J)是次序保持的当且仅当对应于J 中条件的顶点在D A 中构成一条有向路径。

从而我们只需在有向图D A 中找一条最长路径,该问题可在O(|V A |+| E A |)时间内完成。

按上面的方法构造有向图如下:有向图中找最长路径的线性时间算法。

一些表示方法如下:d out (u )为顶点u 的出度,d in (u )为顶点u 的入度,source 为入度为0的顶点,sink 为出度为0的顶点,N out (u )为u 指向的邻接点集合,P uv 为从u 到v 的最长路,显然应从source 到sink 。

在每一步为每个顶点关联一个永久的或临时的标签。

v被赋了一个临时标签(v’,i v)表明在当前步,算法找出的最长的从source到v的有向路长度为i v,且经由v’而来。

v被赋了一个永久标签[v’,i v]表明从source到v的最长有向路长度为i v,且经由v’而来,通过回溯每个顶点的永久标签就可以找出最长有向路。

ACM程序大赛选拔初赛试题 - 参考答案

ACM程序大赛选拔初赛试题 - 参考答案

《解方程》参考答案:
#include <stdio.h> #include <math.h> void main() {
int a,b,c,d; float x1,x2; scanf("%d %d %d %d",&a,&b,&c,&d); if(a==0) printf("x=%.2f",(float)(d-c)/b); else {
float dr=b*b-4*a*c; c-=d; if(dr>0) {
x1=(-b-sqrt(dr))/(2*a); x2=(-b+sqrt(dr))/(2*a); printf("x1=%.2f x2=%.2f\n",x1,x2); } if(dr==0) { x1=(-b+sqrt(dr))/(2*a); printf("x=%.2f\n",x1); } if(dr<0) printf("no answer\n"); } }
3、计算器 (难度系数:★★★☆☆)
题意:输入一个没有答案的算术式子,用计算机求出输出它的结果。 输入:一个字符串形如“a#b=”(#代表运算符号)。注意:输入的字符串中 a,b 代表的数 都为自然数。而且 a,b 的范围都是从 0 到 999。 输出:字符串对应的算式的答案。答案需保留两位有效数字。若无答案则输出“error” 示例:
输出:第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之 间用一个空格分开。
示例:
输入(只选一组) 3 5 12
输出(幸运儿的位置)
2 13 241 53 2 4 6 8 10 12 3 7 11 5 19

acm竞赛试题及答案

acm竞赛试题及答案

acm竞赛试题及答案ACM(Association for Computing Machinery)竞赛是一项全球性计算机科学竞赛,旨在锻炼参赛者的问题解决能力和编程技巧。

每年都有数千名来自不同学校的学生参加这一挑战。

本文将提供一些最近的ACM竞赛试题以及相应的答案,帮助读者了解和学习竞赛题目的类型和解题思路。

1. 问题描述给定一个由N个整数组成的数组A,请编写一个程序,找出数组中两个不同元素的差的最小值。

2. 输入格式- 第一行包含一个整数N,表示数组A的长度。

- 第二行包含N个以空格分隔的整数,表示数组A中的元素。

3. 输出格式输出一个整数,表示数组中两个不同元素的差的最小值。

4. 示例输入:51 52 9 12输出:15. 解题思路该问题可以通过对数组进行排序,并比较相邻两个数的差值来求解。

首先,将数组A进行升序排序。

然后,遍历排序后的数组,依次计算相邻两个数的差值,并记录其中的最小值。

最后,返回这个最小差值即可。

6. 代码实现```pythondef min_difference(nums):nums.sort() # 对数组进行升序排序min_diff = float('inf') # 初始化最小差值为正无穷大for i in range(len(nums)-1):diff = abs(nums[i] - nums[i+1]) # 计算相邻两个数的差值min_diff = min(min_diff, diff) # 更新最小差值return min_diff# 输入处理N = int(input())A = list(map(int, input().split()))# 调用函数并输出结果result = min_difference(A)print(result)```7. 答案解析对给定的数组进行排序后,遍历数组计算相邻两个数的差值,并记录其中的最小值。

上述代码中,首先将数组A进行升序排序,然后使用一个变量`min_diff`来记录最小差值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

油漆金字塔★问题描述法老Smith打算盖一座金字塔。

为了避免金字塔受风吹日晒,他打算给金字塔刷上油漆。

但是在当时,油漆还是比较稀有的东西,价格比较贵。

Smith希望在保证金字塔质量(即体积)的情况下,用尽量少的油漆。

身为建造官的你,需要帮法老解决这个问题。

你请来了王国最好的数学家身为建造官的你,需要帮法老解决这个问题。

你请来了王国最好的数学家,设计了金字塔的结构图:金字塔由N个长方体组成。

每个长方体,高度为h,长度和宽度均为d。

它们以顶部正方形的中心为轴心,层层叠加。

为了保持金字塔稳定性,从下至上,每层长方体的高度和边长必需逐级递减,且为了计算方便,h和d均为正整数。

金字塔总体积为V,总面积为S(除金字塔最底部外的其他暴露在空气中的面积之和)法老需要知道,在保证体积为M的基础上,最小的油漆面积S是多少。

★实验任务现请你写一个程庐,输出最小油漆面积。

★数据输入输入数据包括一行,为两个整数N(I≤n≤25)和V(≤m=5000),分别表示金字塔层数和总体积。

输入保证该体积的金字塔是可以建造的★结果输出#include<string.h>#Define INF 100000000#Define Min(a, b)(a<b?a; b)int N;int M;int ans;int minv[25], mins[25];void init(){minv[0]=0;mins[0]=0;for(int i=1; i<=M; i++)minv[i]= minv[i-1]+i*i*i;mins[i]=mins[i-1]+4*i*i;}}void dfs(int m, int v, int s, int d, int h){if(m==0){if(ans>s&&v==N) ans=s;}if(s+mins[m-1] > ans || v + minv[m-1]> N || 4*(N-v)/d+s >=ans) return;for(int i=d-1; i>=m; i--){int maxh= Min((N-v-minv[m-1])/(i*1),h-1);for(int j=max; j>=m; j--){if(m==M)S=i*i;dfs(m-1,v+i*i*j,S+4*i*j,i,j);}}}int main(){scanf("%d%d",&M,&N);ans=INF;init();dfs(M,0,0,N+1,N+1);printf("%d\n",ans);return 0;}冰桶挑战Z大也兴起了一股冰桶挑战之风,参加过的人将会请自己的好友一起参加,并如此继线下去.实验任务已知一个N*M的关系图,每人相邻的四个方向上的人表示他的好友。

希望价你能找到最后参加冰桶挑战的人输入数据就一行有4个正数N,M和X,Y(1<=N,M,X,Y<=100),表示关系图是N行M列的,并且第一个参加冰桶挑战的人位上(X,Y)轴出最后参加冰桶战的人位于关系图的位置,若有多个则先按X从小到大,X相同#include<stdio.h>double fun(int a, int b, int x, int y){double c;c=(x-a)*(x-a)+(y-b)*(y-b);return c;}int main(){int N, M,X, Y;cin >>N>>M>>X>>Y;double d1, d2, d3, d4;d1=fun(1,1,X,Y);d2=fun(1, M, X, Y);d3=fun(N, 1, X, Y);d4=fun(N, M, X, Y);i(N==1){if(d1>d2)cout<<N<<""<<1<<endl;else if(d1<d2)cout<<N<<""<<M<<endl;else{cout<<N<<""<<1<<endl;cout<<N<<""<<M<<endl;}}if(M==1&&N!=1){if(d1>d3)cout<<M<<"" <<1<<endl;else if(dl<d3)cout<<M<<""<<N<<endl;else{cout<<M<<""<<1<<endl;cout<<M<<""<<N<<endl;}}double max =0;if(max <d1 )max =d1;if(max<d2)max=d2;if(max<d3)max=d3;if(max<d4)max=d4;if(max==d1)cout<<1<<""<<1<<endl;if(max==d2)cout<<1<<""<<M<<endl;if(max==d3)cout<<N<<""<<1<<endl;if(max==d4)cout<<N<<""<<M<<endl;return 0;}N皇后问题★问题描述八皇后问题,是一个古老而著名的问照,是回算法的典型素例该问问黑是际西洋棋棋手马克斯·贝器尔于1848年提出,在8X8格的国际象上摆放八个皇后,使其不能互相攻击,即任竄两个皇后都不能处于同一行、间一列取同一斜线上,问有多少种摆法。

高斯认为有76种方案。

1854年在柏林的象棋染上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果现在问是,给一个NN的棋盘,在上面放N个皇后,使其不能互相攻击,并且,给定某些位置是不能放皇后的,同总共有多少种提法。

★编程任务給一个N*N的林盘,在上面放N个皇后,使其不能互相攻击。

并且,给定某些位置是不能放皇后的,问总共有多少种法★数据输入输入数据第一行为两个整数N,M(3<=N<=8,0<=M<=N*N),表示棋盘大小为N*N,有M个位置不能放皇后,接下来轴入M行,每行两个整数x、y(1<=x,y<=N),表示第x行第y列不能放皇后★数据输出1个整数,表示有多少种摆法int k=0, n;int a[10][10]={0};void yy(int c[], int b[], int w){int j, i;for(i=1;<=n;i++){if(b[i]==0&&a[i][w]==0){for(j=1;j<w;j++)if(i-c[j]== w-j||i-c[j]==j-w) break;if(j<w)continue;if(w==n)k++;else{c[w] =i;b[i]=1;yy(c, b, w+1);b[i]=0;c[w]=0;}}}}int main(){int b[10]={0};int m, x,y;int c[10]={0};scan("%d%d", &n, &m);while(m--){scanf("%d%d", &x, &y);a[x][y]=1;}yy(c, b, 1);printf("%d\n", k);return 0;}回文问题任意定一个字符单,求量少插入几个字符,会使其成为回文回文一种对称的字符串例,”“Ab3bd”可以过入两个字符变成回文,”dAb3bAd"取着" Adb3bdA",但是插入少于2个的字符无法形成回文编程任务任意始定一个字符率,设计一款算法求最少插入几个字符,会使该字符串成为回文数据输入轴入数据为一行字符串,其长度L:3<=L<=5000,由’A'to’Z’、’a’to’z’和’0’ to ‘9’组成数据输出#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;#define MAX 1010int res[MAX][MAX];int main(){int n, i,j;string str, tmp;cin>>str;temp=str;reverse(tmp.begin(), tmp.end());for(i=0; i<str.size(); ++i){for(j=0; j<str.size(); ++j){if(str[i]!=tmp[j]){res[i+1][j+1]=max(res[i+1][j],res[i][j+1]);}else{res[i+1][j+1]=res[i][j+1];}}printf("%d\n",str.size()-res[i][j]);return 0;}骑行问题★问题描述小马研是一名骑行爱好者。

他准备骑行4.5km,从A地出发前往B地从A地前往B地的路上还有很多的单车一族,假设除小马研外,其他人的速度总是固定的。

小马哥现在在A地,他会在那等特一个也是到B地骑行的人,然后跟上他。

共且和他同样的这度前往B地。

在此期间,如果没有人超过小写哥速度,则小马哥保持速度直到到达目的地,如果有人骑行速度超过小马开井且从小马研身边超过,则小马哥会立即加速跟上速度更快的人,和他一起骑行。

★编程任务假设小马哥到达A地时的时是0秒,给你其它骑行者从A点出发时的遠度和时刻,请你计算小马到达B地时的时。

★数据输入每组试据第一行包含一个整数N(1(=N〈1000,豪示从A地到B地劳行的人有N个,接下来N 行,每行两个整数V(0Y(=40)和T,表示某个骑行者的这度(km/h)以及该骑行者从A点出发时的时(秒)。

相关文档
最新文档