山东理工大学ACM平台题目答案
acm初赛试题及答案
acm初赛试题及答案# acm初赛试题及答案1. 问题描述给定一个整数n,求出n以内所有正整数的和。
2. 输入格式输入包含一个整数n(1≤n≤10000)。
3. 输出格式输出一个整数,表示n以内所有正整数的和。
4. 样例输入```100```5. 样例输出```5050```6. 问题分析本题要求计算从1到n的所有正整数的和。
这是一个简单的数学问题,可以通过公式求解。
7. 解题思路使用求和公式:\( \sum_{i=1}^{n} i = \frac{n(n+1)}{2} \)。
8. 算法实现编写一个函数,输入n,输出计算结果。
9. 代码示例```pythondef sum_of_numbers(n):return n * (n + 1) // 2n = int(input())print(sum_of_numbers(n))```10. 注意事项输入的n可能会非常大,需要考虑整数溢出的问题。
11. 测试用例- 输入:1输出:1- 输入:10输出:55- 输入:10000输出:5000500012. 评分标准- 正确性:算法正确,输出结果符合预期。
- 效率:算法执行效率高,能在规定时间内完成计算。
- 代码风格:代码可读性好,注释清晰。
13. 常见错误- 未考虑整数溢出。
- 未正确使用求和公式。
- 代码中存在语法错误。
14. 扩展思考- 如果要求计算从m到n的所有正整数的和,应该如何修改算法? - 如何优化算法以处理更大的输入值?15. 参考答案- 对于扩展思考的第一个问题,可以将求和公式修改为:\( \sum_{i=m}^{n} i = \frac{n(n+1)}{2} - \frac{(m-1)m}{2} \)。
- 对于扩展思考的第二个问题,可以考虑使用更高效的数据结构或者算法来减少计算量。
以上是ACM初赛试题及答案的完整内容。
acm试题及答案2
acm试题及答案2ACM试题及答案21. 问题描述:编写一个程序,计算给定整数序列中的最大子段和。
2. 输入格式:第一行包含一个整数N,表示序列的长度。
第二行包含N个整数,表示序列中的整数。
3. 输出格式:输出一个整数,表示序列中的最大子段和。
4. 样例输入:```51 -2 -34 -1```5. 样例输出:```6```6. 问题分析:该问题可以通过动态规划的方法来解决。
定义一个数组dp,其中dp[i]表示以第i个元素结尾的最大子段和。
状态转移方程为dp[i] = max(dp[i-1] + nums[i], nums[i])。
7. 算法实现:```pythondef maxSubArray(nums):n = len(nums)dp = [0] * ndp[0] = nums[0]max_sum = nums[0]for i in range(1, n):dp[i] = max(dp[i-1] + nums[i], nums[i])max_sum = max(max_sum, dp[i])return max_sum```8. 复杂度分析:时间复杂度为O(n),其中n为序列的长度。
空间复杂度为O(n)。
9. 测试用例:- 输入:`[3, -2, 4]`输出:`5`- 输入:`[-2, 1, -3, 4, -1, 2, 1, -5, 4]`输出:`6`10. 注意事项:- 确保输入的序列长度N大于等于1。
- 序列中的整数可以是负数或正数。
- 输出结果应该是一个整数。
11. 扩展思考:- 如何优化算法以减少空间复杂度?- 如果序列中的整数是浮点数,算法是否仍然有效?12. 参考答案:- 可以通过只使用一个变量来存储最大子段和,以及一个变量来存储当前子段和,从而将空间复杂度优化到O(1)。
- 如果序列中的整数是浮点数,算法仍然有效,但需要注意浮点数运算的精度问题。
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平台题目答案1464#include<stdio.h>#include<stdlib.h>struct node{int date;struct node *next;};struct node *creat(struct node *head,int m){int i;struct node *p,*tail;head->next=NULL;tail=head;for(i=1;i<=m;i++){p=(struct node*)malloc(sizeof(struct node));scanf("%d",&p->date);p->next=NULL;tail->next=p;tail=p;}return head;}struct node *del(struct node *head,int z,int r) {struct node *q,*p;int i=0;p=head;while(p->next!=NULL){if((p->next->date>=z)&&(p->next->date<=r)){i=1;break;}else p=p->next;}if(i==1){q=p->next;p->next=q->next;free(q);return p;}else return 0;}void show(struct node *head){struct node *y;y=head->next;while(y!=NULL){if(y->next!=NULL)printf("%d ",y->date);if(y->next==NULL)printf("%d",y->date);y=y->next;}printf("\n");}int main(){int n,v,n1,n2,n3,i;struct node *head,*q;scanf("%d",&n1);for(i=0;i<n1;i++){v=0;head=(struct node*)malloc(sizeof(struct node));scanf("%d %d %d",&n,&n2,&n3);getchar();creat(head,n);q=head;while(q!=NULL){q=del(q,n2,n3);++v;}if(v-1==n)printf("-1\n");elseshow(head);free(q);free(head);}return 0;}1138#include<stdio.h>#include<stdlib.h>struct node{int date;struct node *next;};struct node *creat(struct node *head,int m){int i;struct node *p,*tail;head->next=NULL;tail=head;for(i=1;i<=m;i++){p=(struct node*)malloc(sizeof(struct node));scanf("%d",&p->date);p->next=NULL;tail->next=p;tail=p;}return head;}struct node *del(struct node *head,int z){struct node *q,*p;int i=0;p=head;while(p->next!=NULL){if(p->next->date==z){i=1;break;}else p=p->next;}if(i==1){q=p->next;p->next=q->next;free(q);return p;}else return 0;}void show(struct node *head){struct node *y;y=head->next;while(y!=NULL){if(y->next!=NULL)printf("%d ",y->date);if(y->next==NULL)printf("%d",y->date);y=y->next;}printf("\n");}int main(){int n,k,v=0;struct node *head,*q;head=(struct node*)malloc(sizeof(struct node));scanf("%d",&n);creat(head,n);scanf("%d",&k);printf("%d\n",n);show(head);q=head;while(q!=NULL){q=del(q,k);++v;}printf("%d\n",n-v+1);show(head);return 0;}1605#include<stdio.h>#include<string.h>void show(char c,int a,int b) {if(c=='+')printf("%d\n",a+b);else if(c=='-')printf("%d\n",a-b);else if(c=='*')printf("%d\n",a*b);else if(c=='/'&&b!=0)printf("%.2lf\n",1.0*a/b); }int main(){int n,a[1000],b[1000],i;char c[1000];while(scanf("%d",&n)!=EOF){getchar();for(i=0;i<n;i++){scanf("%c %d %d",&c[i],&a[i],&b[i]);getchar();}for(i=0;i<n;i++){show(c[i],a[i],b[i]);}}return 0;}1606#include<stdio.h>int f(int m){int p;if(m==0)p=7;if(m==1)p=11;if(m>1)p=f(m-1)+f(m-2);return p;}int main(){int n,m;while(scanf("%d",&n)!=EOF){m=f(n);if(m%3==0)printf("yes\n");elseprintf("no\n");}return 0;}1608#include<stdio.h>#include<stdlib.h>int main(){int n,m,i,j,k;int *a;scanf("%d %d",&n,&k);a=(int *)malloc(n*sizeof(int));for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++){if(a[j]<a[j+1]){m=a[j];a[j]=a[j+1];a[j+1]=m;} }for(i=0;i<k;i++){if(i<k-1)printf("%d ",a[i]);else printf("%d\n",a[i]);}return 0;}1607#include<stdio.h>#include<stdlib.h>int main(){int n,a,b,i;int *x;while(scanf("%d %d %d",&a,&b,&n)!=EOF&&(a||b||n)) {x=(int *)malloc(n*sizeof(int));x[0]=1;x[1]=1;for(i=2;i<n;i++){x[i]=(a*x[i-1]+b*x[i-2])%7;}printf("%d\n",x[n-1]);free(x);}return 0;}1634#include<stdio.h>int f(int k){int i,j;for(i=2;i<k;i++){if(k%i==0){j=i;break;}}return j;}int show(int a){int i;for(i=2;i<a-1;i++)if(a%i==0)return 0;return 1;}int main(){int n,m,i,k;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&m);k=m;if(show(m))printf("%d",m);if(!show(m)){while(!show(k)){printf("%d*",f(k));k=k/f(k);}printf("%d",k);}printf("\n");}return 0;}2119#include<stdio.h>#include<stdlib.h>struct node{int date;struct node *next;};struct node * creat(int n){struct node *p,*head1,*tail;head1=(struct node*)malloc(sizeof(struct node));int i;head1->next=NULL;tail=head1;for(i=1;i<=n;i++){p=(struct node*)malloc(sizeof(struct node));scanf("%d",&p->date);p->next=NULL;tail->next=p;tail=p;}return head1;}struct node * built(int m){struct node *q,*head2,*end;head2=(struct node*)malloc(sizeof(struct node));int j;head2->next=NULL;end=head2;for(j=1;j<=m;j++){q=(struct node *)malloc(sizeof(struct node));scanf("%d",&q->date);q->next=NULL;end->next=q;end=q;}return head2;}struct node * merge(struct node *head1,struct node *head2) {struct node *p,*q,*tail;p=head1->next;q=head2->next;tail=head1;free(head2);while(p&&q){if(p->date<q->date){tail->next=p;tail=p;p=p->next;}else{tail->next=q;tail=q;q=q->next;}}if(p)tail->next=p;elsetail->next=q;return head1;}void show(struct node *head1) {struct node *p;p=head1->next;while(p!=NULL){if(p->next!=NULL)printf("%d ",p->date);elseprintf("%d\n",p->date);p=p->next;}}int main(){struct node *head1,*head2;int n,m;scanf("%d %d",&n,&m);head1=creat(n);head2=built(m);head1=merge(head1,head2);show(head1);return 0;}2120#include<stdio.h>#include<stdlib.h>int c=0;int v=0;struct node{int date;struct node *next;};struct node *creat(int n){struct node *head1,*p,*tail;int i;head1=(struct node *)malloc(sizeof(struct node));head1->next=NULL;tail=head1;for(i=1;i<=n;i++){p=(struct node *)malloc(sizeof(struct node));scanf("%d",&p->date);p->next=NULL;tail->next=p;tail=p;}return head1;}struct node *split(struct node *head1){struct node *head2,*p,*q,*tail,*end;head2=(struct node *)malloc(sizeof(struct node));head2->next=NULL;end=head2;p=head1->next;head1->next=NULL;tail=head1;q=p->next;while(p!=NULL){if(p->date%2!=0){p->next=NULL;tail->next=p;tail=p;c++;}else{p->next=NULL;end->next=p;end=p;v++;}p=q;if(q!=NULL)q=q->next;}return head2;}void show(struct node *head1,struct node *head2) {struct node *p,*q;p=head2->next;q=head1->next;while(p!=NULL){if(p->next!=NULL)printf("%d ",p->date);elseprintf("%d\n",p->date);p=p->next;}while(q!=NULL){if(q->next!=NULL)printf("%d ",q->date);elseprintf("%d\n",q->date);q=q->next;}}int main(){int n;struct node *head1,*head2;scanf("%d",&n);head1=creat(n);head2=split(head1);printf("%d %d\n",v,c);show(head1,head2);return 0;}2187#include<stdio.h>#include<string.h>int main(){char a[100000],b[100000];int i,j,k,m,v,c,n;while(scanf("%s %s",a,b)!=EOF) {n=0;getchar();k=strlen(a);j=strlen(b);c=0;for(i=0;i<k;i++){v=0;m=n;for(;m<j;){if(a[i]-b[m]==0){n=m;v=1;n=n+1;break;}else m++;}if(v==1)c++;}if(c==k)printf("Yes\n");else printf("No\n");}return 0;}2761#include<stdio.h>#include<string.h>int main(){int m,j,k,i,c[10000],v;char a[10000];while(scanf("%s",a)!=EOF){getchar();k=strlen(a);m=0;for(i=0;i<k;){c[m]=0;v=0;for(j=i;;j++){if(a[i]-a[j]==0){c[m]++;++v;}if(a[i]-a[j]!=0){break;}}if(c[m]==1)printf("%c",a[i]);if(c[m]>1)printf("%d%c",c[m],a[i]);i=i+v;m++;}printf("\n");}return 0;}2765#include<stdio.h>int main(){int n,m,i;long a[100];while(scanf("%d %d",&n,&m)!=EOF){for(i=1;i<m;i++){a[i]=i;}for(i=m;i<=n;i++)a[i]=a[i-m+1]+a[i-1];printf("%ld\n",a[n]);}return 0;}2773#include<stdio.h>int main(){int n,m,i,k;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&m);if(m<150)k=m;else if(m>150&&m<200)k=m-150;else if(m>200&&m<300)k=m-200;else if(m>300&&(m%100>0)&&(m%100<50)) k=m%100;else if(m>300&&(m%100>50)&&(m%100<100)) k=m%100-50;elsek=0;printf("%d\n",k);}return 0;}2560#include<stdio.h>#include<string.h>int main(){int i,j,k,n;char a[100000],b[100000],c[5];strcpy(c,"2013");while(gets(a)!=NULL){if(strcmp(a,c)==0)break;k=strlen(a);j=0;for(i=0;i<k;i++){if(a[i]!=' '){b[j]=a[i];j++;}}n=0;for(i=0,k=j-1;i<k;i++,k--){if(b[i]==b[k])n++;}if(n==j/2)printf("YES\n");else printf("NO\n");}return 0;}1916#include<stdio.h>#include<string.h>int main(){int n,j,k,i,m,v,h;char a[1000],b[100000];scanf("%d",&n);getchar();for(i=0;i<n;i++){scanf("%s",a);getchar();h=strlen(a);k=0;for(j=0;j<h;j++){if(a[j]=='-'&&(a[j-1]>='0'&&a[j-1]<='9'&&a[j+1]<='9'&&a[ j+1]>='0')&&(a[j+1]-a[j-1]>=0)){for(m=j;m<j+a[j+1]-a[j-1]-1;m++){b[k]=a[j-1]+(m-j+1);k++;}}elseif(a[j]=='-'&&(a[j-1]>='a'&&a[j-1]<='z'&&a[j+1]<='z'&&a[j+1 ]>='a')&&(a[j+1]-a[j-1]>=0)){for(m=j;m<j+a[j+1]-a[j-1]-1;m++){b[k]=a[j-1]+(m-j+1);k++;}}elseif(a[j]=='-'&&(a[j-1]>='A'&&a[j-1]<='Z'&&a[j+1]<='Z'&&a[j+1 ]>='A')&&(a[j+1]-a[j-1]>=0)){for(m=j;m<j+a[j+1]-a[j-1]-1;m++){b[k]=a[j-1]+(m-j+1);k++;}}else{b[k]=a[j];k++;}}for(v=0;v<k;v++)printf("%c",b[v]);printf("\n");}return 0;}2085#include<stdio.h>#include<string.h>int main(){int n,m,j,i,k,h,i1,i2,v;char a[20][201],t;scanf("%d",&n);getchar();for(i=0;i<n;i++){gets(a[i]);k=strlen(a[i]);for(j=0,h=k-1;j<h;j++,h--){t=a[i][j];a[i][j]=a[i][h];a[i][h]=t;}a[i][k]=' ';m=0;v=0;for(j=0;j<=k;j++){if(a[i][j]==' '){m=j;for(i1=v,i2=m-1;i1<i2;i2--,i1++){t=a[i][i1];a[i][i1]=a[i][i2];a[i][i2]=t;}v=m+1;}}printf("Case %d:",i+1);for(h=0;h<k;h++)printf("%c",a[i][h]);printf("\n");}return 0;}1568#include<stdio.h>#include<string.h>int main(){int n,j,k,m,i,v,h;char a[20][20];scanf("%d %d",&n,&m);getchar();for(i=0;i<n;i++){gets(a[i]);}for(i=0;i<n;i++){k=0;for(j=0;j<m;j++){if(a[i][j]=='1')++k;}if(k==m){for(h=i;h>0;h--)strcpy(a[h],a[h-1]);for(v=0;v<m;v++)a[0][v]='0';}}for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%c",a[i][j]);printf("\n");}return 0;}1594#include<stdio.h>#include<string.h>int main(){int m,n,i,j;char a[20][20],b[20][20];scanf("%d %d",&n,&m);getchar();for(i=0;i<n;i++){gets(a[i]);}for(i=0;i<n;i++)for(j=0;j<m;j++){b[j][i]=a[i][j];}for(i=0;i<m;i++)for(j=n-1;j>=0;j--){printf("%c",b[i][j]);}printf("\n");}return 0;}2809#include<stdio.h>#include<math.h>int show(int a){int i;for(i=2;i<=sqrt(a);i++)if(a%i==0)return 0;return 1;}int main(){int m,i;while(scanf("%d",&m)!=EOF&&(m||m)){for(i=2;i<m;i++){if(show(i)&&show(m-i)){printf("%d = %d + %d\n",m,i,m-i);break;}}return 0;}2109#include<stdio.h>#include<algorithm>using namespace std;long a[1000004];int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%ld",&a[i]);}sort(a,a+n);reverse(a,a+n);for(i=0;i<n;i++){if(i<n-1)printf("%ld ",a[i]);if(i==n-1)printf("%ld\n",a[i]);}return 0;}2765#include<stdio.h>int main(){int n,i;long a[21];while(scanf("%d",&n)!=EOF){a[1]=0;a[2]=1;for(i=3;i<=n;i++)a[i]=(n-1)*(a[i-1]+a[i-2]);printf("%ld\n",a[n]);}return 0;}2521#include<stdio.h>int main(){int n, i, j, max, c, x;long long a[1000];while(scanf("%d", &n)!=EOF){max = -1;c = 0;for(i = 0; i < n; i++){scanf("%d", &a[i]);}for(i = 0; i < n; i++){x = 0;for(j = i + 1; j < n; j++){if(a[i] == a[j])x++;}if(max < x){max = x;c = i;}else if(max == x){if(a[c] > a[i]){c = i;}}else max = max;}printf("%lld %d\n", a[c], max+1); }return 0;}2801#include<stdio.h>int main(){int n,m,i,c,t,j;while(scanf("%d %d",&n,&m)!=EOF){int a[10000],b[10000];int g[100000]={0};c=0;for(i=0;i<m;i++){scanf("%d %d",&a[i],&b[i]);if(a[i]>b[i]){t=a[i];a[i]=b[i];b[i]=t;}}for(i=0;i<m-1;i++){for(j=i+1;j<m;j++){if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;t=b[i];b[i]=b[j];b[j]=t;}}}if(a[0]!=0)printf("0\n");else{g[b[0]]=1;for(i=0;i<m;i++){if(g[a[i]]==1)g[b[i]]=1;else if(g[b[i]]==1)g[a[i]]=1;}for(i=1;i<n;i++){if(g[i]==1){c++;}}printf("%d\n",c);}}return 0;}2747#include<stdio.h>#include<string.h>char a[81],c[81];int main(){int j,m,i,h,n,v;while(scanf("%s",a)!=EOF){getchar();m=-1;n=strlen(a);for(i=0;i<n;i++){v=0;if(n%(i+1)==0){h=0;for(j=0;j<n;j++){c[j]=a[h];if(h==i)h=0;else h++;}c[n]='\0';if(strcmp(a,c)==0){v=i;break;}}}for(i=0;i<=v;i++)printf("%c",a[i]);printf("\n");}return 0;}2398#include<stdio.h>#include<string.h>struct node{int q;char p[1000];}a[10000],b[10000],c[10000]; int main(){struct node d;int n,m,x,j,i,o;int k,n2;while(scanf("%d",&n)!=EOF){int n1[10000];for(o=0;o<n;o++){scanf("%d %d",&m,&x);for(i=0;i<m;i++){scanf("%s %d",a[i].p,&a[i].q);}for(j=m;j<x+m;j++){a[j].q=0;scanf("%s %d",a[j].p,&n1[j]);for(k=0;k<n1[j];k++){scanf("%s",c[k].p);for(i=0;i<m+x;i++)if(strcmp(c[k].p,a[i].p)==0)a[j].q=a[j].q+a[i].q;}}scanf("%d",&n2);for(i=0;i<n2;i++){scanf("%s",b[i].p);}for(i=0;i<n2;i++)for(j=0;j<m+x;j++){if(strcmp(b[i].p,a[j].p)==0){b[i].q=a[j].q;}}for(i=0;i<n2-1;i++)for(j=i+1;j<n2;j++){if(b[i].q>b[j].q){d=b[i];b[i]=b[j];b[j]=d;}}for(i=0;i<n2;i++){printf("%s\n",b[i].p);}printf("\n");}printf("\n");}return 0;}1227#include<stdio.h>int main(){int n,m,j,i,k,c;int a[100001],b[100001];scanf("%d %d",&n,&m);for(i=0;i<n;i++)scanf("%d",&a[i]);for(j=0;j<m;j++)scanf("%d",&b[j]);c=0;k=-1;for(i=0;i<n;i++){for(j=0;j<m;j++){if(a[i]==b[j]&&k<j){k=j;c++;break;}}}printf("%d\n",c);return 0;}2046#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){char a[202],b[202];int c[202]={0};int n,m,k,i;scanf("%s %s",a,b);getchar();n=strlen(a);m=strlen(b);reverse(a,a+n);reverse(b,b+m);if(n>m){k=n;for(i=0;i<m;i++){if(c[i]+a[i]+b[i]-96<10)c[i]=(a[i]+b[i]-96+c[i]);else if(c[i]+a[i]+b[i]-96>=10){c[i]=(a[i]+b[i]-96+c[i])%10;c[i+1]=1;}}if(c[m]==0)for(i=m;i<n;i++)c[i]=a[i]-48;if(c[m]==1)for(i=m;i<n;i++){if(c[i]+a[i]-48>=10){c[i]=(a[i]+c[i]-48)%10;c[i+1]=1;}elsec[i]=a[i]-48+c[i];}}else if(n<m){k=m;for(i=0;i<n;i++){if(c[i]+a[i]+b[i]-96<10)c[i]=(a[i]+b[i]-96+c[i]);else if(c[i]+a[i]+b[i]-96>=10){c[i]=(a[i]+b[i]-96+c[i])%10;c[i+1]=1;}}if(c[n]==0)for(i=n;i<m;i++)c[i]=b[i]-48;else if(c[n]==1)for(i=n;i<m;i++){if(c[i]+b[i]-48>=10){c[i]=(b[i]+c[i]-48)%10;c[i+1]=1;}elsec[i]=b[i]-48+c[i];}}else if(n==m){k=n;for(i=0;i<m;i++){if(c[i]+a[i]+b[i]-96<10)c[i]=(a[i]+b[i]-96+c[i]);else if(c[i]+a[i]+b[i]-96>=10){c[i]=(a[i]+b[i]-96+c[i])%10;c[i+1]=1;}}}if(c[k]==0){reverse(c,c+k);for(i=0;i<k;i++)printf("%d",c[i]);}if(c[k]==1){reverse(c,c+k+1);for(i=0;i<=k;i++)printf("%d",c[i]);}printf("\n");return 0;}2074#include<stdio.h>#include<algorithm>using namespace std;int main(){int n,m,i;while(scanf("%d %d",&n,&m)!=EOF){int a[300],b[300];for(i=0;i<n;i++)scanf("%d",&a[i]);if(n<=m){printf("%d\n",n);}else{sort(a,a+n);for(i=1;i<n;i++){b[i-1]=a[i]-a[i-1]-1;}sort(b,b+n-1);int k=a[n-1]-a[0]+1;int nline=1;int devide=n-2;while((nline<m)&&(b[devide]>0)){nline++;k=k-b[devide];devide--;}printf("%d\n",k);}}return 0;}1299#include<stdio.h>int main(){int n,m,j,i;int a[1001],b[1001];scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);b[1]=1;for(i=2;i<=n;i++){m=0;for(j=1;j<i;j++)if(a[i]>a[j])if(m<b[j])m=b[j];b[i]=m+1;}int c=-1;for(i=1;i<=n;i++){if(c<b[i])c=b[i];}printf("%d\n",c);return 0;}1730#include<stdio.h>int main(){int n,m,j,i,k;int a[110][110],b[110][110];scanf("%d",&n);for(i=1;i<=n;i++)for(j=1;j<=i;j++)scanf("%d",&a[i][j]);for(i=1;i<=n;i++)b[n][i]=a[n][i];for(i=n;i>1;i--){for(j=1;j<i;j++)if(b[i][j]>b[i][j+1])b[i-1][j]=b[i][j]+a[i-1][j];elseb[i-1][j]=b[i][j+1]+a[i-1][j];}printf("%d\n",b[1][1]);return 0;}1491#include<stdio.h>#include<string.h>struct node{char a[11];};int main(){char b[22],d[22],y[22];struct node c[10001];int n,m,i;while(scanf("%d",&n)!=EOF&&(n||n)){m=0;for(i=0;i<n;i++)scanf("%s",&c[i].a);scanf("%s",b);scanf("%s",d);strcpy(y,b);strcat(b,d);strcat(d,y);for(i=0;i<n;i++)if(strcmp(c[i].a,b)==0||strcmp(c[i].a,d)==0){m=1;break;}if(m==1)printf("yes\n");elseprintf("No\n");}return 0;}。
大学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;long long f(long long m, long long n){if(n==0) return 1;else return f(m-1,n-1)*m/n;}int main(){long long m,n;while(scanf("%I64d %I64d",&n,&m) && n+m){printf("%I64d\n",f(m+n,min(m,n)));}return 0;}1、北大ACM(1012)JosephTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 31213 Accepted: 11700 DescriptionThe Joseph's problem is notoriously known. For those who are not familiar with the original problem: from among n people, numbered 1, 2, . . ., n, standing in circle every mth is going to be executed and only the life of the last remaining person will be saved. Joseph was smart enough to choose the position of the last remaining person, thus saving his life to give us the message about the incident. For example when n = 6 and m = 5 then the people will be executed in the order 5, 4, 6, 2, 3 and 1 will be saved.Suppose that there are k good guys and k bad guys. In the circle the first k are good guys and the last k bad guys. You have to determine such minimal m that all the bad guys will be executed before the first good guy.题目大意:编号为1,2…, n的n个人排成一圈,从第一个人开始,去掉后面的第m个人,在从第m+1个人开始去掉后面第m个人,以此类推。
acm大赛试题及答案
acm大赛试题及答案ACM大赛试题及答案1. 题目一:字符串反转问题描述:编写一个程序,输入一个字符串,输出其反转后的字符串。
输入格式:输入包含一个字符串,字符串长度不超过100。
输出格式:输出反转后的字符串。
示例:输入:hello输出:olleh答案:```pythondef reverse_string(s):return s[::-1]input_string = input().strip()print(reverse_string(input_string))```2. 题目二:计算阶乘问题描述:编写一个程序,输入一个非负整数n,输出n的阶乘。
输入格式:输入包含一个非负整数n,n不超过20。
输出格式:输出n的阶乘。
示例:输入:5输出:120答案:```pythondef factorial(n):if n == 0:return 1else:return n * factorial(n - 1)n = int(input())print(factorial(n))```3. 题目三:寻找最大数问题描述:给定一个包含n个整数的数组,找出数组中的最大数。
输入格式:输入包含一个整数n,表示数组的大小,随后是n个整数。
输出格式:输出数组中的最大数。
示例:输入:5 1 2 3 4 5输出:5答案:```pythonn = int(input())numbers = list(map(int, input().split()))max_number = max(numbers)print(max_number)```4. 题目四:判断闰年问题描述:编写一个程序,输入一个年份,判断该年份是否为闰年。
输入格式:输入包含一个整数,表示年份。
输出格式:如果输入的年份是闰年,则输出"Yes",否则输出"No"。
示例:输入:2000输出:Yes答案:```pythonyear = int(input())if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):print("Yes")else:print("No")```5. 题目五:斐波那契数列问题描述:编写一个程序,输入一个非负整数n,输出斐波那契数列的第n项。
[山科]第一届山东省ACM竞赛题解
第一届山东省ACM竞赛题解A.Phone Number简单题。
n只有1000,O(n ^ 2)判断就可以了。
B.Balloons数据结构简单题,DFS求连通分量。
注意两个式子,前者表示是4个方向连通,后者表示8个方向连通。
C.Clockwise计算几何+DP。
首先要看明白顺时针和逆时针的定义,其实按正常的理解就可以,但要注意三点共线的情况,例如下标为a<b<c 的三点构成的角180度算作顺时针,0度算作逆时针。
顺逆时针用叉积和点积判断就可以。
删掉最少点,也就是保留最多点,我们考虑顺时针的情况(逆时针相同),考虑保留下来的最后一条线段,它和它的前一条线段要构成顺时针的角才可以,所以我们使用dp[i][j](i > j)来表示最后一条线段是i,j所能保留下来的最大的珠子数,dp[i][j] = max(dp[j][k] + 1)(j > k,i、j、k 三点构成顺时针角),复杂度O(n^3)D.Shopping简单题。
最大值-最小值的二倍就是答案。
E.Emergency图论,Flody算法。
Q有100000之大,每次求两点间距离必然超时。
但是可以发现图只有300个顶点,我们只在新的顶点被标记时更新两点间的距离,分析可以发现我们可以先更新从此标记点到另外点的最短距离,再更新从另外点到此标记点的最短距离,最后再更新经过此标记点的最短距离就可以了,复杂度O(n^2),总共可能有n次标记,故总复杂度O(n^3),其它查询在O(1)内就能完成。
另外要注意的是会有重边和自环,求最短路,重边保留最小的,自环去掉就可以了。
F.Fairy tale模拟题。
读懂题目,跟着题目模拟就可以了。
需要注意的就是geometrical distance是两点间的直线距离,我理解为行和列差值的和错了一次。
定义一个状态结构,然后定义<操作符,用set判重,可以简化操作,尽量用数组存方位信息,而不是IF-ELSE。
ACM题目与答案-F
贴海报
输入 72145133 #define for if(0); else for include <stdio.h> include <iostream> typedef _int64 LL; const int N= 100010; int a[N],s[N],p[N],n; int main(){ while(scanf(“%d” ,&n)!=EOF && n!=0){ LL ans=0 int *sp=s,*pp=p;
查询任务
★问题描述 程序员小明在写代码的时候遇到一个难题。就是他现在需要处理一段序列 A1,A2,...,AN.客户 会给出一个区间[a,b],然后系统返回 Aa 到 Ab 的求和结果。但同时他又必须经常修改其中一 段子序列的值,修改过程为对一个区间[a,b],将 Aa 到 Ab 的值加上一个值 c 老板要求他能够高效地完成以上需求。现在,请你帮他完成这个任务吧 ★数据输入: 第一行是两个整数 N 和 Q。 1≤NQ≤100000 第二行包含 N 个数字,A1,A2,…,AN 的初始值。其中-100000000≤Ai≤100000000 接下来的 Q 行每行表示一个操作: “Cabc”表示对 Aa 到 Ab 的每一个值均加上数值 c。 “Qab”表示求 Aa 到 Ab 的求和结果。 ★结果输出: 于每一次 Q 询问输出一行,表示这一次询问的结果 输入 10 5 1 2 3 4 5 6 7 8 9 10 Q44 Q 1 10 Q24 C363 Q24 #include<stdio.h> int main(){ int N, Q; int A[100002],i,j, k, a,b,c; char ch; _int64 sum; while(scanf(%d %d", &N, &Q)!=EOF) { for(i=1; K<=N; 1++) scanf("%d", &A[i]); for(j=0; j<Q;j++) if(scanf("%c”, &ch)&&ch==’Q’) { scanf("%d%d", &a, &b); sum=0; for(k=a;k<=b;k++) sum=sum+A[k]; printf(“%I64d\n”,sum); else if(ch==’C’) { 输出 4 55 9 15
ACM软件大赛之编程大赛题目(附部分答案)
ACM软件大赛之编程大赛比赛注意事项:●比赛时间为3小时(180分钟);比赛分两个阶段:第一阶段限时30分钟,完成公示的3题,第二阶段限时150分钟(事先完成第一阶段题目的小组可提前进入第二阶段);●比赛第一阶段的3道题目将在前期宣传中告知参赛选手,比赛第二阶段的题目将由赛事主席当场公布竞赛题目;●前两阶段题目分为三个分值(5分、10分、15分),第一阶段3道公示题都为5分;第二阶段总共15道题,根据不同的难度分值不同,分别为5道5分题,5道10分题,5道15分题;第一阶段参赛队员不可参考任何相关资料;第二阶段参赛队员可以携带诸如书,手册,程序清单等参考资料。
比赛过程中队员不得携带任何电子媒质的资料;参赛者可以选择自己擅长的语言(C,C++,JAVA等等)进行编写●考虑到大一和大二学生的知识掌握程度,大一参加选手一开始就会有10分的分数,最后总分是由所做题目及初始的10分相加得到。
●每组队员根据安排使用电脑,小组人数为两人的使用一台电脑,超过两人的使用两台电脑,每台的电脑配置完全相同;●各小组每做完一题或几题,必须交予评委老师运行,评委老师当场给分;●如在比赛中发现作弊等行为,将取消比赛资格。
第一阶段公示题目:题目一:(5分)打印以下图形,纵遵从字母顺序,行字符数遵从斐波那契数列ABCCDDDEEEEEFFFFFFFFGGGGGGGGGGGGG#include<iostream>int f(int x){int a = 1 , b = 0;int max_ = x;int sum = 0;for(int i = 0; i < max_ ; i++){sum = a + b;a = b;b = sum;}return sum;}void loop_print(int num,char chr){for(int i = 0; i < num ;i++)std::cout<<chr;std::cout<<"\n";}int main(){int line_max = 7;char chr = 'A';for(int line = 0; line < line_max; line++){loop_print(f(line+1),chr);chr++;}return 0;}题目二:(5分)有个电子钟,12点显示为12:00(即12小时制),那么请问一天24时间内,出现连续3个相同数字的钟点有几个?#include<iostream>using namespace std;bool check(int time){int h=time/100;int m=time-100*h;return h<=12&&m<=59&&h>0?true:false;//12小时制}int main(){int time=0;int j(0);//总计数器while(time<1270){//max 12:59int t=time;int n[4];for(int i=0;i<4;i++){n[i]=t%10;t /= 10;}if(n[1]==n[2]&&(n[0]==n[1]||n[3]==n[1])&&check(time)){//cout<<n[3]<<n[2]<<":"<<n[1]<<n[0]<<"\n";//testj++;}time++;}cout<<"total: "<<j*2<<endl;}题目三:(5分)10进制的四位数中有几个符合如下特征:将其分别表示为16进制、10进制、12进制,在每种状态下,分别将各个位上的数相加,能得到3个相等10进制数。
acm基础试题及答案
acm基础试题及答案ACM基础试题及答案1. 以下哪个选项是C语言中正确的字符串声明方式?A. char str[] = "Hello World";B. char str[10] = "Hello World";C. string str = "Hello World";D. char str = "Hello World";答案:A2. 在C++中,以下哪个关键字用于定义类的私有成员?A. publicB. privateC. protectedD. static答案:B3. 以下哪个数据结构允许快速随机访问元素?A. 链表B. 队列C. 数组D. 栈答案:C4. 在Python中,以下哪个函数用于将列表中的元素连接成一个字符串?A. join()B. concat()C. append()D. merge()答案:A5. 在数据库管理系统中,SQL代表什么?A. Structured Query LanguageB. Standard Query LanguageC. Simple Query LanguageD. System Query Language答案:A6. 在HTML中,用于定义最重要的标题的标签是什么?A. <h1>B. <title>C. <header>D. <h6>答案:A7. 在JavaScript中,以下哪个方法用于将字符串转换为小写?A. toUpperCase()B. toLowerCase()C. toUpperCase()D. toCamelCase()答案:B8. 在Unix/Linux系统中,哪个命令用于查看当前目录下的文件和文件夹?A. lsB. pwdC. cdD. mkdir答案:A9. 在C语言中,以下哪个函数用于计算数组中元素的总和?A. sum()B. count()C. sizeof()D. memset()答案:A10. 在Java中,以下哪个关键字用于创建单例模式?A. staticB. finalC. synchronizedD. volatile答案:A。
acm数学竞赛试题及答案
acm数学竞赛试题及答案# 题目一:数列问题问题描述:给定一个数列 \( a_1, a_2, a_3, \ldots, a_n \),数列中每个元素都是正整数,且满足 \( a_i = a_{i-1} + a_{i-2} \) 对于所有\( i \geq 3 \)。
如果 \( a_1 = 1 \) 且 \( a_2 = 1 \),请找出数列的第 \( n \) 项。
解答:根据题意,这是一个斐波那契数列。
第 \( n \) 项的值可以通过递归关系计算得出。
对于 \( n \) 的值,可以使用以下递归公式:\[ a_n = a_{n-1} + a_{n-2} \]其中,\( a_1 = 1 \) 和 \( a_2 = 1 \)。
因此,数列的前几项为 1, 1, 2, 3, 5, 8, 13, 21, ...。
对于任意的 \( n \),可以通过递归或动态规划方法计算出 \( a_n \)。
# 题目二:组合问题问题描述:从 \( n \) 个不同的元素中选择 \( k \) 个元素的所有可能组合的个数是多少?解答:这个问题可以通过组合数学中的二项式系数来解决。
从 \( n \) 个不同元素中选择 \( k \) 个元素的组合数 \( C(n, k) \) 可以用以下公式计算:\[ C(n, k) = \frac{n!}{k!(n-k)!} \]其中,\( n! \) 表示 \( n \) 的阶乘。
# 题目三:几何问题问题描述:在一个直角坐标系中,给定三个点 \( A(x_1, y_1) \),\( B(x_2, y_2) \) 和 \( C(x_3, y_3) \)。
如果 \( \overrightarrow{AB} \) 和 \( \overrightarrow{AC} \) 是垂直的,求证 \( A \) 是直角三角形 \( ABC \) 的直角顶点。
解答:如果 \( \overrightarrow{AB} \) 和 \( \overrightarrow{AC} \) 垂直,那么它们的数量积(点积)应该为零。
山东理工大学计算机操作系统试题及答案
1.( D)不是基本的操作系统。
A、批处理操作系统B、分时操作系统C、实时操作系统D、网络操作系统2.(C )不是分时系统的基本特征:A、同时性B、独立性C、实时性D、交互性3.处理器执行的指令被分成两类,其中有一类称为特权指令,它只允许(C )使用。
A、操作员B、联机用户C、操作系统D、目标程序4.当用户程序执行访管指令时,中断装置将使中央处理器(B )工作。
A、维持在目态B、从目态转换到管态C、维持在管态D、从管态转换到目态5.进程所请求的一次打印输出结束后,将使进程状态从( D)A、运行态变为就绪态B、运行态变为等待态C、就绪态变为运行态D、等待态变为就绪态6.采用动态重定位方式装入的作业,在执行中允许(C )将其移动。
A、用户有条件地B、用户无条件地C、操作系统有条件地D、操作系统无条件地7.分页式存储管理中,地址转换工作是由(A )完成的。
A、硬件B、地址转换程序C、用户程序D、装入程序8.如果允许不同用户的文件可以具有相同的文件名,通常采用( D)来保证按名存取的安全。
A、重名翻译机构B、建立索引表C、建立指针D、多级目录结构9.对记录式文件,操作系统为用户存取文件信息的最小单位是(C )。
A、字符B、数据项C、记录D、文件10.为了提高设备分配的灵活性,用户申请设备时应指定(A )号。
A、设备类相对B、设备类绝对C、相对D、绝对11.通常把通道程序的执行情况记录在(D )中。
A、PSWB、PCBC、CAWD、CSW12.作业调度是从输入井中处于( B)状态的作业中选取作业调入主存运行。
A、运行B、收容C、输入D、就绪13.一作业进入内存后,则所属该作业的进程初始时处于(C )状态。
A、运行B、等待C、就绪D、收容14.共享变量是指(D )访问的变量。
A、只能被系统进程B、只能被多个进程互斥C、只能被用户进程D、可被多个进程15.临界区是指并发进程中访问共享变量的( D)段。
A、管理信息B、信息存储C、数据D、程序16.若系统中有五台绘图仪,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则至多允许( D)个进程参于竞争,而不会发生死锁。
ACM算法题以及答案
在做这些题目之前必须了解vector(数组),list(链表)、deque(双端队列)、queue(队列),priority_queue(优先队列)Stack(栈)、set(集合)、map(键值对),mutilset、mutilmap。
stack堆栈,没有迭代器,支持push()方法。后进先出,top()返回最顶端的元素,pop()剔除最顶元素
定义queue对象的示例代码如下:
queue<int> q1;
queue<double> q2;
queue的基本操作有:
入队,如例:q.push(x);将x接到队列的末端。
出队,如例:q.pop();弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
#include <vector>
vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
using std::vector; vector<int> v;
或者连在一起,使用全名:
std::vector<int> v;
建议使用全局的命名域方式:
using namespace std;
list不支持随机访问。所以没有 at(pos)和operator[]。
list对象list1, list2 分别有元素list1(1,2,3),list2(4,5,6) 。list< int>::iterator it;
list成员
说明
constructor
构造函数
destructor
析构函数
ACM算法题以及答案
ACM算法题使用C++实现在做这些题目之前必须了解vector(数组),list(链表)、deque(双端队列)、queue(队列), priority_queue(优先队列)Stack(栈)、set(集合)、map(键值对),mutilset、mutilmap。
stack堆栈,没有迭代器,支持push()方法。
后进先出,top()返回最顶端的元素,pop()剔除最顶元素deque双端队列,支持迭代器,有push_back()方法,跟vector差不多,比vector多了个pop_front,push_front方法queue队列,先进先出,不支持迭代器,有push()方法,pop()剔除第一个元素,front()返回第一个元素vector使用vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:using std::vector; vector<int> v;或者连在一起,使用全名:std::vector<int> v;建议使用全局的命名域方式:using namespace std;1.vector的声明vector<ElemType> c; 创建一个空的vectorvector<ElemType> c1(c2); 创建一个vector c1,并用c2去初始化c1vector<ElemType> c(n) ; 创建一个含有n个ElemType类型数据的vector;vector<ElemType> c(n,elem); 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;c.~vector<ElemType>(); 销毁所有数据,释放资源;2.vector容器中常用的函数。
acm考试题目及答案
acm考试题目及答案1. 题目:给定一个整数数组,找出数组中没有出现的最小的正整数。
答案:首先,我们可以遍历数组,将每个元素与它的索引对应起来,即如果数组中存在数字`i`,则将其与索引`i-1`对应。
然后,我们可以遍历数组,检查索引`i`是否与数组中第`i`个元素相等。
如果不相等,则索引`i`对应的值就是没有出现的最小正整数。
如果所有元素都与其索引对应,则没有出现的最小正整数为数组长度加1。
2. 题目:实现一个函数,检查一个链表是否为回文结构。
答案:我们可以将链表的前半部分反转,然后比较反转后的前半部分与后半部分是否相同。
如果相同,则链表是回文的;如果不相同,则不是。
具体步骤如下:首先找到链表的中点,然后反转前半部分链表,接着比较反转后的前半部分与后半部分是否相同,最后将前半部分链表再次反转回来。
3. 题目:给定一个只包含 '(' 和 ')' 的字符串,判断字符串是否有效。
答案:我们可以使用一个栈来解决这个问题。
遍历字符串中的每个字符,如果遇到'(',则将其压入栈中;如果遇到')',则检查栈是否为空,如果为空,则字符串无效;如果不为空,则弹出栈顶元素。
遍历结束后,如果栈为空,则字符串有效;如果栈不为空,则字符串无效。
4. 题目:找出一个无序数组中第k大的元素。
答案:我们可以使用快速选择算法来解决这个问题。
首先,选择一个元素作为基准,然后将数组分为两部分:一部分是大于基准的元素,另一部分是小于基准的元素。
根据基准的位置,我们可以确定第k大的元素是在基准的左边还是右边,然后递归地在相应的部分中寻找第k大的元素。
重复这个过程,直到找到第k大的元素。
5. 题目:给定一个字符串,找出其中不含有重复字符的最长子串的长度。
答案:我们可以使用滑动窗口的方法来解决这个问题。
维护一个窗口,记录窗口内字符的出现情况。
遍历字符串,如果遇到重复的字符,则移动窗口的左边界,直到窗口内没有重复的字符。
ACM题目与答案-I
ACM程序设计试题及参考答案
ACM程序设计试题及参考答案猪的安家Andy和Mary养了很多猪。
他们想要给猪安家。
但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。
举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。
Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。
这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。
Andy都快疯了。
你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。
输入输入包含多组测试数据。
每组数据第一行包含一个整数n (n <= 10) – Andy 建立猪圈的次数,解下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。
你可以假定(ai, aj) = 1.输出输出包含一个正整数,即为Andy家至少养猪的数目。
样例输入33 15 17 2样例输出16答案:// 猪的安家.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "iostream.h"void main(){int n;int s[10][2];bool r[10];char ch;cout<<"请输入次数:"<<endl;cin>>n;for (int i=0;i<n;i++){cout<<"请输入第"<<i+1<<"次的猪圈个数和剩下的猪:,用--分开,"<<endl;cin>>s[i][0]>>ch>>ch>>s[i][1];}for (i=0;i<10;i++)r[i]=true;for (int sum=1;;sum++){for (i=0;i<n;i++)r[i]=(sum%s[i][0]==s[i][1]);for (i=0;i<n;i++){if (r[i]==0)break;}if (i==n)break;}cout<<"猪至少有"<<sum<<"只。
acm编程例题 参考答案
acm编程例题参考答案ACM编程例题参考答案ACM(Advanced Computer Mathematics)是一种面向计算机科学与技术的竞赛形式,旨在提高参与者的编程技能和解决问题的能力。
ACM编程例题是指在ACM竞赛中出现的一系列编程题目,这些题目涵盖了各种算法和数据结构的应用。
本文将给出一些ACM编程例题的参考答案,希望能够帮助读者更好地理解和掌握这些题目的解法。
一、题目一:最大公约数题目描述:给定两个正整数a和b,求它们的最大公约数。
解题思路:最大公约数可以通过欧几里得算法来求解。
该算法的基本思想是,两个正整数的最大公约数等于其中较小的数和两数之差的最大公约数。
具体的实现可以使用递归或循环的方式。
代码示例:```c++int gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);}```二、题目二:素数判断题目描述:给定一个正整数n,判断它是否为素数。
解题思路:素数是只能被1和自身整除的正整数。
判断一个数是否为素数可以使用试除法,即从2开始,依次判断n是否能被2到sqrt(n)之间的数整除。
如果存在能整除n的数,则n不是素数;否则,n是素数。
代码示例:```c++bool isPrime(int n) {if (n <= 1) {return false;}for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return false;}}return true;}```三、题目三:字符串反转题目描述:给定一个字符串s,将其反转后输出。
解题思路:字符串反转可以通过将字符串的首尾字符依次交换来实现。
可以使用双指针的方式,一个指针指向字符串的首字符,另一个指针指向字符串的尾字符,然后交换两个指针所指向的字符,并向中间移动,直到两个指针相遇。
代码示例:```c++void reverseString(string& s) {int left = 0;int right = s.length() - 1;while (left < right) {swap(s[left], s[right]);left++;right--;}}```四、题目四:二分查找题目描述:给定一个有序数组和一个目标值,使用二分查找算法在数组中找到目标值的索引,如果目标值不存在,则返回-1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct node * merge(struct node *head1,struct node *head2)
{
struct node *p,*q,*tail;
p=head1->next;
int i;
head1->next=NULL;
tail=head1;
for(i=1;i<=n;i++)
{
p=(struct node*)malloc(sizeof(struct node));
scanf("%d",&p->date);
p->next=NULL;
tail->next=p;
{
int i;
struct node *p,*tail;
head->next=NULL;
tail=head;
for(i=1;i<=m;i++)
{
p=(struct node*)malloc(sizeof(struct node));
scanf("%d",&p->date);
#include<stdio.h>
#include<string.h>
void show(char c,int a,int b)
{
if(c=='+')
printf("%d\n",a+b);
else if(c=='-')
printf("%d\n",a-b);
else if(c=='*')
{
struct node *y;
y=head->next;
while(y!=NULL)
{
if(y->next!=NULL)
printf("%d ",y->date);
if(y->next==NULL)
printf("%d",y->date);
y=y->next;
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{m=a[j];a[j]=a[j+1];a[j+1]=m;}
}
for(i=0;i<k;i++)
{
if(i<k-1)
printf("%d ",a[i]);
else printf("%d\n",a[i]);
while(scanf("%d",&n)!=EOF)
{
m=f(n);
if(m%3==0)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
1608
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
struct node
{
int date;
struct node *next;
};
struct node * creat(int n)
{
struct node *p,*head1,*tail;
head1=(struct node*)malloc(sizeof(struct node));
if(!show(m))
{
while(!show(k))
{
printf("%d*",f(k));
k=k/f(k);
}
printf("%d",k);
}
printf("\n");
}
return 0;
}
2119
#include<stdio.h>
scanf("%d",&k);
printf("%d\n",n);
show(head);
q=head;
while(q!=NULL)
{
q=del(q,k);
++v;
}
printf("%d\n",n-v+1);
shБайду номын сангаасw(head);
return 0;
}
1605
}
printf("\n");
}
int main()
{
int n,v,n1,n2,n3,i;
struct node *head,*q;
scanf("%d",&n1);
for(i=0;i<n1;i++)
{v=0;
head=(struct node*)malloc(sizeof(struct node));
free(q);
free(head);
}
return 0;
}
1138
#include<stdio.h>
#include<stdlib.h>
struct node
{
int date;
struct node *next;
};
struct node *creat(struct node *head,int m)
return 0;
}
1606
#include<stdio.h>
int f(int m)
{
int p;
if(m==0)
p=7;
if(m==1)
p=11;
if(m>1)
p=f(m-1)+f(m-2);
return p;
}
int main()
{
int n,m;
p->next=NULL;
tail->next=p;
tail=p;
}
return head;
}
struct node *del(struct node *head,int z)
{
struct node *q,*p;
int i=0;
p=head;
while(p->next!=NULL)
}
void show(struct node *head)
{
struct node *y;
y=head->next;
while(y!=NULL)
{
if(y->next!=NULL)
printf("%d ",y->date);
if(y->next==NULL)
printf("%d",y->date);
return 0;
return 1;
}
int main()
{
int n,m,i,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
k=m;
if(show(m))
printf("%d",m);
end=head2;
for(j=1;j<=m;j++)
{
q=(struct node *)malloc(sizeof(struct node));
scanf("%d",&q->date);
q->next=NULL;
end->next=q;
end=q;
}
return head2;
}
return 0;
}
1607
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,a,b,i;
int *x;
while(scanf("%d %d %d",&a,&b,&n)!=EOF&&(a||b||n))
{
x=(int *)malloc(n*sizeof(int));
{
if(p->next->date==z)
{
i=1;
break;
}
else p=p->next;
}
if(i==1)
{
q=p->next;
p->next=q->next;
free(q);
return p;
}
else return 0;
tail=p;
}
return head;
}
struct node *del(struct node *head,int z,int r)
{
struct node *q,*p;