浙江大学2007年复试上机题 解题报告
来源:互联网 发布:计算机技术与软件中级 编辑:程序博客网 时间:2024/05/01 14:01
九度OJ 题目1020:最小长方形
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1207 解决:633
题目描述:
给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。
输入:
测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个输入的结束。
输出:
对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。
样例输入:
12 56
23 56
13 10
0 0
12 34
0 0
0 0
样例输出:
12 10 23 56
12 34 12 34
九度OJ 题目1021:统计字符
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1126 解决:668
题目描述:
统计一个给定字符串中指定的字符出现的次数。
输入:
测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一。当读到'#'时输入结束,相应的结果不要输出。
输出:
对每个测试用例,统计第1行中字符串的每个字符在第2行字符串中出现的次数,按如下格式输出:
c0 n0
c1 n1
c2 n2
...
其中ci是第1行中第i个字符,ni是ci出现的次数。
样例输入:
I
THIS IS A TEST
i ng
this is a long test string
#
样例输出:
I 2
i 3
5
n 2
g 2
九度OJ 题目1022:游船出租
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:994 解决:399
题目描述:
现有公园游船租赁处请你编写一个租船管理系统。当游客租船时,管理员输入船号并按下S键,系统开始计时;当游客还船时,管理员输入船号并按下E键,系统结束计时。船号为不超过100的正整数。当管理员将0作为船号输入时,表示一天租船工作结束,系统应输出当天的游客租船次数和平均租船时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有租船没有还船,或者只有还船没有租船的纪录,系统应能自动忽略这种无效纪录。
输入:
测试输入包含若干测试用例,每个测试用例为一整天的租船纪录,格式为:
船号(1~100) 键值(S或E) 发生时间(小时:分钟)
每一天的纪录保证按时间递增的顺序给出。当读到船号为-1时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即当天的游客租船次数和平均租船时间(以分钟为单位的精确到个位的整数时间)。
样例输入:
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
-1
样例输出:
2 196
0 0
1 60
九度OJ 题目1023:EXCEL排序
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1608 解决:387
题目描述:
Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
输入:
测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
样例输入:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0
样例输出:
Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
九度OJ 题目1024:畅通工程
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:589 解决:351
题目描述:
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
输入:
测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M (N, M < =100 );随后的 N 行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。
样例输入:
3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
样例输出:
3
?
暂留
九度OJ 题目1025:最大报销额
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1395 解决:327
题目描述:
现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。
输入:
测试输入包含若干测试用例。每个测试用例的第1行包含两个正数 Q 和 N,其中 Q 是给定的报销额度,N(N<=30)是发票张数。随后是 N 行输入,每行的格式为:
m Type_1:price_1 Type_2:price_2 ... Type_m:price_m
其中正整数 m 是这张发票上所开物品的件数,Type_i 和 price_i 是第 i 项物品的种类和价值。物品种类用一个大写英文字母表示。当N为0时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即可以报销的最大数额,精确到小数点后2位。
样例输入:
200.00 3
2 A:23.50 B:100.00
1 C:650.00
3 A:59.99 A:120.00 X:10.00
1200.00 2
2 B:600.00 A:400.00
1 C:200.50
1200.50 3
2 B:600.00 A:400.00
1 C:200.50
1 A:100.00
100.00 0
样例输出:
123.50
1000.00
1200.50
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1207 解决:633
题目描述:
给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。
输入:
测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个输入的结束。
输出:
对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。
样例输入:
12 56
23 56
13 10
0 0
12 34
0 0
0 0
样例输出:
12 10 23 56
12 34 12 34
维护x和y的min和max即可
//浙大2010:题目1020:最小长方形//给定一系列2维平面点的坐标(x, y),其中x和y均为整数//要求用一个最小的长方形框将所有点框在内。//长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。//其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束#include <fstream>#include <iostream>using namespace std;int main(){//int i, j, k, m, n;int x, y, left, right, up, down, count;ifstream cin("ZJU_1020.txt");//bool end = 0;while(1){count = 0;while( cin >> x >> y ){if( !count ){if( x==0 & y==0 ){ end = 1; break; }else{//读入第一个点时 给四向赋值left = right = x;up = down = y;}}count++;if( x==0 && y==0 ) break;left = min(x,left);right = max(x,right);up = max(y,up);down = min(y,down);}if( end ) break;cout << left << " " << down << " " << right << " " << up << endl; }system("pause");//return 0;}
九度OJ 题目1021:统计字符
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1126 解决:668
题目描述:
统计一个给定字符串中指定的字符出现的次数。
输入:
测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一。当读到'#'时输入结束,相应的结果不要输出。
输出:
对每个测试用例,统计第1行中字符串的每个字符在第2行字符串中出现的次数,按如下格式输出:
c0 n0
c1 n1
c2 n2
...
其中ci是第1行中第i个字符,ni是ci出现的次数。
样例输入:
I
THIS IS A TEST
i ng
this is a long test string
#
样例输出:
I 2
i 3
5
n 2
g 2
//浙大2010:题目1021:统计字符//统计一个给定字符串中指定的字符出现的次数//第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串//注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一//当读到'#'时输入结束,相应的结果不要输出#include <fstream>#include <string>#include <iostream>using namespace std;int main(){int i, j, k, m, n;string s, t;int a[5], slen, tlen;ifstream cin("ZJU_1021.txt");//while( getline(cin,s) ){if( s == "#" ) break;getline(cin,t);slen = s.length();tlen = t.length();memset(a,0,sizeof(a));for( i=0; i<tlen; i++ ){for( j=0; j<slen; j++ )if( t[i]==s[j] ) { a[j]++; break; }}for( i=0; i<slen; i++ )cout << s[i] << " " << a[i] << endl;}system("pause");//return 0;}
九度OJ 题目1022:游船出租
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:994 解决:399
题目描述:
现有公园游船租赁处请你编写一个租船管理系统。当游客租船时,管理员输入船号并按下S键,系统开始计时;当游客还船时,管理员输入船号并按下E键,系统结束计时。船号为不超过100的正整数。当管理员将0作为船号输入时,表示一天租船工作结束,系统应输出当天的游客租船次数和平均租船时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有租船没有还船,或者只有还船没有租船的纪录,系统应能自动忽略这种无效纪录。
输入:
测试输入包含若干测试用例,每个测试用例为一整天的租船纪录,格式为:
船号(1~100) 键值(S或E) 发生时间(小时:分钟)
每一天的纪录保证按时间递增的顺序给出。当读到船号为-1时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即当天的游客租船次数和平均租船时间(以分钟为单位的精确到个位的整数时间)。
样例输入:
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
-1
样例输出:
2 196
0 0
1 60
一个需要注意的细节 只用bool标记穿是否被租过是不行的 因为0标记未租 1标记有E输入 还应有个状态2标记成功退回
//浙大2010:题目1022:游船出租//当管理员将0作为船号输入时,表示一天租船工作结束//系统应输出当天的游客租船次数和平均租船时间。//input: 船号(1~100) 键值(S或E) 发生时间(小时:分钟)//-1表示全部输入结束#include <fstream>#include <memory.h>#include <string>#include <iostream>using namespace std;struct BOAT{int start, end;int duration;}boat[100];int rent[100];int getTime( string s ){return ((s[0]-'0')*10+s[1]-'0')*60 + (s[3]-'0')*10+s[4]-'0';}int main(){int i, j, k, m, n;char status;string t;ifstream cin("ZJU_1022.txt");//memset(rent,0,sizeof(rent));while( cin >> n >> status >> t && n!=-1 ){if( n-- ){//n--以便匹配boat[100]的下标if( rent[n]==1 && status=='S' || rent[n]==0 && status=='E' )//排除错误输入continue;if( status=='S' ){rent[n] = 1;boat[n].start = getTime(t);}else{rent[n] = 2;boat[n].end = getTime(t);boat[n].duration = boat[n].end - boat[n].start;}}else{//n==0int total=0, num=0, average;for( i=0; i<100; i++ ){if( rent[i]==2 ){//cout << "->" << i+1 << endl;num++;total += boat[i].duration;}}if( !num )cout << "0 0\n";else{average = total/num;if( 1.0*total/num >= 0.5+average )average++;cout << num << " " << average << endl;}memset(rent,0,sizeof(rent));}}system("pause");//return 0;}
九度OJ 题目1023:EXCEL排序
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1608 解决:387
题目描述:
Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
输入:
测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
样例输入:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0
样例输出:
Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
跟清华06年上机题1061是基本一致的 算是浙大抄袭清华?网上是该有回忆版的
//浙大2010:题目1023:EXCEL排序//每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、//姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成//当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;//当 C=3时,按成绩的非递减排序。//当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。#include <fstream>#include <algorithm>#include <cstring>#include <cstdio>#include <iostream>using namespace std;struct STUDENT{char id[7], name[9];int score;}t[100005];bool cmp1( STUDENT x, STUDENT y ){return strcmp(x.id,y.id)<0;}bool cmp2( STUDENT x, STUDENT y ){if( strcmp(x.name,y.name)==0 )return strcmp(x.id,y.id)<0;return strcmp(x.name,y.name)<0;}bool cmp3( STUDENT x, STUDENT y ){if( x.score == y.score )return strcmp(x.id,y.id)<0;return x.score < y.score;}int main(){//int i, j, k, m, n;int i, c, n, cases=0;freopen("ZJU_1023.txt","r",stdin);//while( scanf("%d%d",&n,&c)==2 && n ){cases++;for( i=0; i<n; i++ )scanf("%s%s%d",t[i].id,t[i].name,&t[i].score);//string不加&if( c==1 )sort(t,t+n,cmp1);else if( c==2 )sort(t,t+n,cmp2);else sort(t,t+n,cmp3);printf("Case %d:\n",cases);for( i=0; i<n; i++ )printf("%s %s %d\n",t[i].id,t[i].name,t[i].score);}while(1);//return 0;}
九度OJ 题目1024:畅通工程
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:589 解决:351
题目描述:
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
输入:
测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M (N, M < =100 );随后的 N 行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。
样例输入:
3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
样例输出:
3
?
暂留
九度OJ 题目1025:最大报销额
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1395 解决:327
题目描述:
现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。
输入:
测试输入包含若干测试用例。每个测试用例的第1行包含两个正数 Q 和 N,其中 Q 是给定的报销额度,N(N<=30)是发票张数。随后是 N 行输入,每行的格式为:
m Type_1:price_1 Type_2:price_2 ... Type_m:price_m
其中正整数 m 是这张发票上所开物品的件数,Type_i 和 price_i 是第 i 项物品的种类和价值。物品种类用一个大写英文字母表示。当N为0时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即可以报销的最大数额,精确到小数点后2位。
样例输入:
200.00 3
2 A:23.50 B:100.00
1 C:650.00
3 A:59.99 A:120.00 X:10.00
1200.00 2
2 B:600.00 A:400.00
1 C:200.50
1200.50 3
2 B:600.00 A:400.00
1 C:200.50
1 A:100.00
100.00 0
样例输出:
123.50
1000.00
1200.50
又见01背包问题 不过有所变形 因为输入数据不是整数 需要先转成整数再处理
//浙大2010:题目1025:最大报销额//允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),//要求每张发票的总额不得超过1000元 每张发票上,单项物品的价值不得超过600元//在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。//第1行包含两个正数 Q 和 N,其中 Q 是给定的报销额度,N(N<=30)是发票张数。//随后是 N 行输入,每行的格式为:// m Type_1:price_1 Type_2:price_2 ... Type_m:price_m//正整数m是物品的件数,Type_i和price_i是第i项物品的种类和价值。//物品种类用一个大写英文字母表示。//output: 可以报销的最大数额 精确到小数点后2位#include <fstream>#include <memory.h>#include <iostream>using namespace std;int invoice[32];int dp[3000002];int main(){int i, j, k, m, n;double A, B, C, total, Q, P, result;char c, d;//读入时可以不需转换直接读floatbool valid;cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(2);ifstream cin("ZJU_1025.txt");//while( cin >> Q >> n && n!=0 ){k = 0;for( i=0; i<n; i++ ){cin >> m;valid = 1;A = B = C = 0;for( j=0; j<m; j++ ){cin >> c >> d >> P;//P=priceswitch( c ){case 'A': A += P; break;case 'B': B += P; break;case 'C': C += P; break;default: valid = 0; //break;}}//m项输入处理if( valid && A<=600 && B<=600 && C<=600 ){total = A+B+C;if( total<=1000 && total<=Q )invoice[k++] = total*100;}}//for( i=0; i<k; i++ )//k=有效发票数//cout << invoice[i] << endl;int q = Q*100;memset(dp,0,sizeof(dp));for( i=0; i<k; i++ )for( j=q; j>=invoice[i]; j-- )dp[j] = max(dp[j],dp[j-invoice[i]]+invoice[i]);cout << dp[q]/100.0 << endl;}system("pause");//return 0;}
- 浙江大学2007年复试上机题 解题报告
- 浙江大学2011年复试上机题 解题报告
- 浙江大学2010年复试上机题 解题报告
- 浙江大学2006年复试上机题 解题报告
- 浙江大学2005年复试上机题 解题报告
- 清华大学2007年复试上机题 解题报告
- 浙江大学计算机学院2007年考研复试上机题
- 清华大学2000年复试上机题 解题报告
- 清华大学2001年复试上机题 第一套 解题报告
- 清华大学2001年复试上机题 第二套 解题报告
- 清华大学2002年复试上机题 第一套 解题报告
- 清华大学2002年复试上机题 第二套 解题报告
- 清华大学2003年复试上机题 解题报告
- 清华大学2006年复试上机题 解题报告
- 清华大学2008年复试上机题 解题报告
- 清华大学2009年复试上机题 解题报告
- 清华大学2010年复试上机题 解题报告
- 清华大学2011年复试上机题 解题报告
- 四极管:Android rameworks/base/libs/utils/RefBase.cpp:507:67: error
- WP7/8 iOS Android改如何选择?
- 李一男2003年在港湾给开发人员培训时的语录
- Java抽象类和接口的区别(好长时间没看这种文章了)
- MapGis67读取点线区
- 浙江大学2007年复试上机题 解题报告
- iphone和Objective-C笔试题 链接
- 让android程序瘦下来 给 Android 应用开发者的十个建议
- 游标
- 人机交互在线学习
- ASP.NET中使用网络驱动器
- oracel 添加表字段 极其备注
- xencenter 开源版和citrix原版的基本一致,是用 python开发跨平台可用
- 通过User-Agent 获得浏览器的信息