ACM-1

ACM-1
ACM-1

一、高精度运算

Propram 1: X+Y , X-Y

Input file: t1.in Output file: t1.out Time limit: 3 seconds

You are given two integernumbers X and Y. Write a program to calculate X+Y and X-Y.

Input

The first line of the input file contains a single integer N, the number of test cases. The following N lines each contains two integers----X and Y ( 0 < X,Y <=10100 ).

Outpt

Print the value of X+Y, X-Y on a separate line.

Sample input and output

(参考程序见下页)

#include “stdio.h”

int x[50], y[50];

/****************** plus ****************/ void plus(int x[], int y[], int t)

{ int j, b=0, z[50];

for (j=0; j<=t; j++)

{ z[j]=(x[j]+y[j]+b);

b=z[j]/10000; z[j]=z[j]%10000; } if (b) { z[t+1]=b; t++; }

for(j=t; j>=0; j--) fprintf(fp2,”%d”,z[j]);

}

/************** minus ***************/ void minus(int x[], int y[], int t)

{ int j, z[50]; char flag;

if(x[t]

for (j=0; j<=t; j++)

{ if (x[j]

while (z[t]==0) t=t-1;

for(j=t; j>=0; j--) fprintf(fp2,”%d”,z[j]);

}

/*************** main ****************/ void main()

{ int N, p, i, j, k, t; char s1[120], s2[120];

FILE fp1,fp2;

fp1=fopen(“t1.in”,”r”);

fscanf(fp1,”%d\n”,&N);

for (p=1; p<=N; p++)

{ fscanf(fp1,”%s %s”,s1,s2);

k=strlen(s1); t=(k+3)/4;

for (i=0; i<=k-1; i++)

{ j=(k-i+3)/4-1;

x[j]=x[j]*10+(s1[i]-…0?) ; }

k=strlen(s2);

for (i=0; i<=k-1; i++)

{ j=(k-i+3)/4-1;

y[j]=y[j]*10+(s2[i]-…0?) ; }

if(t<(k+3)/4)) t=(k+3)/4;

plus(x,y, t); minus(x,y,t);

}

}

二、输出从N个物品中选M个的排列方案。

(主要程序段如下:)

#define M 20

int a[M];

scanf(“%d %d”, &n,&m);

t=1;

do { a[t]=a[t]+1;

if(a[t]>n) {a[t]=0; t--; continue;}

for(j=1; j<=t-1; j++)

if (a[t]= =a[j]) break; //判重if(j= = t)

if(t

else 输出a[1]---a[m] }

} while (t>0);

三、输出从N个物品中选M个的组合方案。(主要程序段如下:)

#define M 20

int a[M];

scanf(“%d %d”, &n,&m);

t=1;

do { a[t]=a[t]+1;

if(a[t]>n) { t--; continue;}

if(t

else 输出a[1]---a[m] }

} while (t>0);

四、走迷宫。

已知一个n*m的迷宫阵,其中0表示可通,1表示不同,编程输出一条从(1,1)走到(n,m)的路线。

五、八皇后问题。

在一个8*8的棋盘上放置八个皇后,使之不能互相攻击。几任两个皇后不能在同一行、同一列、同一个斜线。问共有多少种摆法。

(提示:)

(1)若Q[T]=J 则表示第T个皇后放在第J列;T=1,…,8

(2)A[J]=0,表示当前第J列还没放皇后,A[J]=1;表示第J列已放有皇后;J=1,…,8 (3)B[X]=0,表示当前第X条左斜线还没放皇后,B[X]=1;表示第X条左斜线已放有皇后;

X=2,……,16

(4)C[X]=0,表示当前第X条右斜线还没放皇后,B[X]=1;表示第X条右斜线已放有皇后;

X=-7,……,7

void try(int i)

{ for(j=1; j<=8; j++);

if(a[t]&& b[i+j] && c[i-j])

{ q[i]=j;

a[j]=b[i+j]=c[i-j]=1;

if(i<8) try(i+1);

else 输出数组Q方案;

a[j]=b[i+j]=c[i-j]=0; //还原

}

}

六、已知一个集合S,含有N个正整数,对给定的一个正整数X,求满足如下条件的所有子集

合:即子集合中的所有整数之和等于X。

例如:若S={5,2,3,10,15,7},X=15 ,

则满足条件的子集为:{2,3,10} {5,10 },{ 15 }

七、有一个n*m的棋盘(n, m<=50)有一个中国象棋的”马”,“马”走的规则是:

(1)马走“日”;(2)马只能向右走。

找出一条从(1,1)走到(n,m)最少步数的路线。若没有路,输出“NO”。

八、一个瓶中装有80毫升溶剂,实验时需要平分两份,但现在只有两个杯子,一个容量是50毫升,另一个容量是30毫升,编程:输出将溶剂分成两个40毫升的最少步骤。

九、零件加工问题

一台车床可以加工零件p1,p2,…,pi,但在同一个时刻只能加工一种零件。每个零件i在Si到Ei时刻被加工才能得到工钱ci。由于每个零件加工的时间可能冲突(注意:开始和结束时间相同不算冲突),所以不可能所有的零件都被加工。请选择一组合适的零件,使得工钱最多。只需求出最大工钱数。

数据样例:

3 (零件数,不超过100000)

1 3 10 (si, ei, ci)

4 6 20

2 5 25

样例输出:

30

十、超长数字串

给一个数字串S:1234567891011121314151617181920212223……它是由所有自然数从小到大依次排列起来的。任意给一个数字串S1,容易知道它一定在S中出现无穷多次。编程求出它第一次出现的位置。例如对于串“81”,它最先出现的位置是27。

输入文件仅一行,数字串S1。

Input.txt 81

Output.txt 27

四、路由选择问题

X城有一个含有N个节点的通信网络,在通信中,我们往往关心信息从一个源节点S传输到目标节点T的最短路径。遗憾的是,由于种种原因,线路中总有一些节点会出故障,因此在传输中要避开故障节点。

任务一:求从给定的节点S到节点T的最短路径S1、第二最短路径S2。

任务二:在已知故障节点的情况下,求避开这些故障节点,从节点S到节点T的最短路径S3。

【输入文件】 T4.in

第1行:N S T (节点个数起始节点目标节点)

第2 ~ N+1行:S i1Si2 …S iN(节点i到其它节点的距离为S i j,j=1,2,……,N )最后一行:P T1T2……T p (故障节点的个数及编号)

【输出文件】T4.out

S1S2S3(S1< S2 假设从节点S到节点T至少有两条不同的路径。)

【约束条件】

(1)N < 50 N个节点的编号为1,2,…,N

(2)S ij为整数,0

【样例】

①②*

③④

五、希望小学

地处偏僻山区的X乡有N个自然村,目前还没有一所小学,孩子们要么不上学,要么需要翻过一座座大山到别处上学。如今好啦,有一位热心人士准备捐款在X乡某个自然村建立一所希望小学。

通过调查发现,X乡各个村庄之间的道路较为复杂,有平路、上坡和下坡。考虑到每个村孩子们的人数不同,走上坡、下坡和平路的速度也不同,男孩和女孩走路速度也不同,请你为X乡选择一个最合适建立希望小学的村庄,使得所有的孩子花在路上的总时间最少。

【输入文件】 T5.in

第1行:N B1 B2 B3 G1 G2 G3 (村庄数、男孩分别走平路、上坡、下坡每千

米花费的时间以及女孩分别走平路、上坡、下

坡每千米花费的时间)

第2 行:X1 X2 ……Xn (Xi 表示第i个村要上学的男孩人数)

第2 行:Y1 Y2 ……Yn (Yi 表示第i个村要上学的女孩人数)

第3 行:K (道路数)

第4 ~ K+1行:Ai Bi Si1 Si2 Si3 (村庄Ai到村庄Bi,平路Si1千米,上坡Si2千

米,下坡Si3千米)

【输出文件】T5.out

T (将要建立希望小学的村庄编号)

【约束条件】

(1)N < 30 ,Xi < 20 ,Yi < 20

(2)K < 100 ,每条路的长度< 30千米

(3)B1,B2,B3,G1,G2,G3为整数,都小于10个单位时间/ 每千米

(4)每条道路只给出一组数据。例如:5 8 7 10 3 表示从村庄5往村庄8走,平路有7千米,上坡10千米。下坡3千米;当然也表示从村庄8往村庄5走,平路有7

千米,上坡3千米。下坡10千米。

【样例】

① 7 2 1 3 ②

相关主题