ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)。
数据保证在现实世界中,时间过了整数秒。
输出
对于每组测试数据,输出现实世界过的时间(以秒为单位)。
样例输入
1
6
IN
STAY 60
IN
STAY 1440
OUT
OUT
样例输出
396
测试输入
10
6
IN
STAY 60
IN
STAY 1440
OUT
OUT
6
IN
IN
IN
OUT
OUT
OUT
7
IN
IN
IN
STAY 0 OUT
OUT
OUT
2
IN
STAY 20
3
IN
STAY 0 OUT
3
IN
STAY 10 OUT
4
IN
STAY 10 STAY 10 OUT
5
IN
STAY 20 STAY 20 OUT STAY 120 10
IN
STAY 20 STAY 20 IN
STAY 1440
STAY 1440
OUT
STAY 120
OUT
STAY 1
1
STAY 50
测试输出
396
60
30
60
7320
972
3000
参考代码:
#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 难度:★★
描述
进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。
一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。
我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。
现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。
根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。
输入
第一行输入s,表示测试数据的组数;
每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为一条独木舟的最大承载量,n为人数;
接下来的一组数据为每个人的重量(不能大于船的承载量);
输出
每组人数所需要的最少独木舟的条数。
样例输入
3
85 6
5 84 85 80 84 83
90 3
90 45 60
100 5
50 50 90 40 60
样例输出
5
3
3
测试输入:
20
85 6
5 84 85 80 84 83
90 3
90 45 60
100 5
50 50 90 40 60
150 10
50 50 90 40 60 5 84 85 80 84
112 20
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
150 30
50 88 90 78 78 79 84 85 80 84 50 99 86 40 60 5 84 85 80 111 90 96 60 42 26
88 98 89 96 99
199 50
98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 100
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
100 1
99
100 2
45 56
100 4
45 55 46 54
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25
60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
199 200
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 99 80 111 90 45 60 42 26 99 98 25 34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50
34 46 50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40
60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46
50 50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111 50 50 90 40 60 5
84 85 80 84 50 50 90 40 60 5 84 85 80 111 90 45 60 42 26 24 98 25 34 46 50
50 90 40 60 5 84 85 80 84 50 50 90 40 60 5 84 85 80 111
测试输出:
5
3
3
5
14
22
25
50
100
1
2
2
100
100
100
100
100
100
100
100
参考代码
#include <iostream>
#include <cstdlib>
using namespace std;
int compInc(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int s;
int w,n;
cin>> s;
int i;
int a[300];
int j;
int sum;
int x,y;
for(i=0;i<s;i++)
{
sum = 0;
cin>> w >> n;
for(j=0;j<n;j++)
{
cin>> a[j];
}
qsort(a,n,sizeof(int),compInc);
for(x = 0,y = n-1;x < y; )
{
if(a[x] + a[y] <= w)
{
x++;
y--;
}
else
{
y--;
}
sum++;
}
if(x == y)
{
sum++;
}
cout<< sum <<endl;
}
return 0;
}
第三题 521521ACM
时间限制:1000ms 内存限制:65535KB 难度:★★★
描述
Acm队的小菜对数学的研究不是很透彻,但是固执的他还是想一头扎进去。
浏览网页的小菜忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。
此后,小菜走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。
例如12356就算一个,而5111就不算。
特别的,如果他看到了521三个数连续出现,会特别的愤怒。
例如35210。
输入
多组测试数据:
一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。
输出
一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。
用空格隔开。
样例输入
200 500
300 900
1 600
样例输出
Case 1:2 0
Case 2:2 1
Case 3:6 1
测试输入
200 500
300 900
1 600
1 999999
1 999999
1 999999
1 999999
1 999999
1 999999
1 999999
1 999999
1 999999
1 999999
100 521
1 999999
1 999999
1 999999
1 999999
1 999999
521 521
520 520
1520 1521
19511 19512
测试输出
Case 1:2 0
Case 2:2 1
Case 3:6 1
Case 4:74460 3999
Case 5:74460 3999
Case 6:74460 3999
Case 7:74460 3999
Case 8:74460 3999
Case 9:74460 3999
Case 10:74460 3999
Case 11:74460 3999
Case 12:74460 3999
Case 13:74460 3999
Case 14:6 1
Case 15:74460 3999
Case 16:74460 3999
Case 17:74460 3999
Case 18:74460 3999
Case 19:74460 3999
Case 20:1 1
Case 21:0 0
Case 22:2 1
Case 23:1 0
参考代码
#include<iostream>
using namespace std;
int main()
{
int sum;
int fennu;
int ii;
int a;
int b;
int i;
int j;
//intx[1000010];
//inty[1000010];
int *x = new int[1000050];
int *y = new int[1000050];
x[0] = 0;
y[0] = 0;
int shuzi[10];
int mm;
int k;
int xx[10];
ii = 1;
sum = 0;
fennu = 0;
int flag;
for (i = 1; i<= 1000000; i++) {
flag = 1;
mm = i;
j = 0;
while (mm != 0)
{
if (mm % 1000 == 521)
{
sum++;
fennu++;
x[i] = sum;
y[i] = fennu;
flag = 0;
break;
}
shuzi[j] = mm % 10;
mm = mm / 10;
j++;
}
if (mm != 0)
{
continue;
}
for (k = 0; k<10; k++)
{
xx[k] = 0;
}
for (k = 0; k<j; k++)
{
xx[shuzi[k]]++;
if (xx[1] != 0 && xx[2] != 0 && xx[5] != 0)
{
sum++;
break;
}
}
if (flag)
{
x[i] = sum;
y[i] = fennu;
}
}
while (cin>> a >> b)
{
cout<<"Case "<< ii <<":"<< x[b]-x[a-1] <<" "<< y[b]-y[a-1] <<endl;
ii++;
}
return 0;
}
第四题英雄联盟
时间限制:1000 ms 内存限制:65535 KB 难度:★
描述
欢迎来到英雄联盟…
德莱文…
德莱文在逃跑,卡兹克在追…
我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和终点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是直线。
输入
几组数据,一个整数T表示T组数据
每组数据8个实数,分别表示德莱文的起点和终点坐标,以及卡兹克的起点和终点坐标
输出
如果可能输出 Interseetion,否则输出 Not Interseetion
样例输入
2
-19.74 7.14 22.23 -27.45 -38.79 -5.08 47.51 34.01
-8.61 9.91 -32.47 6.47 -3.81 -16.1 7.82 -6.37
样例输出
Interseetion
Not Interseetion
测试输入
5
-19.74 7.14 22.23 -27.45 -38.79 -5.08 47.51 34.01
-8.61 9.91 -32.47 6.47 -3.81 -16.1 7.82 -6.37
1 1
2 2
3 3
4 4
1 1
2 2 1 2 2 1
1 1
2 1 2 1
3 3
测试输出
Interseetion
Not Interseetion
Not Interseetion
Interseetion
Interseetion
参考代码:
#include <stdio.h>
#include <algorithm>
#include <iostream>
//#include <windows.h>
using namespace std;
struct node
{
double x, y;
};
struct st
{
node a,b;
}data[2];
int judge(int i,int j)
{
if(min(data[i].a.x,data[i].b.x)>max(data[j].a.x,data[j].b.x))
return 0;
if(min(data[i].a.y,data[i].b.y)>max(data[j].a.y,data[j].b.y))
return 0;
if(min(data[j].a.x,data[j].b.x)>max(data[i].a.x,data[i].b.x))
return 0;
if(min(data[j].a.y,data[j].b.y)>max(data[i].a.y,data[i].b.y))
return 0;
double k=(data[i].a.x-data[j].a.x)*(data[j].b.y-data[j].a.y)-(data[i].a.y-data[j].a.y)*(data[j].b.x-data[j].a.x);
double l=(data[i].b.x-data[j].a.x)*(data[j].b.y-data[j].a.y)-(data[i].b.y-data[j].a.y)*(data[j].b.x-data[j].a.x);
double m=(data[j].a.x-data[i].a.x)*(data[i].b.y-data[i].a.y)-(data[j].a.y-data[i].a.y)*(data[i].b.x-data[i].a.x);
double n=(data[j].b.x-data[i].a.x)*(data[i].b.y-data[i].a.y)-(data[j].b.y-data[i].a.y)*(data[i].b.x-data[i].a.x);
return k*l<=0&&m*n<=0;
}
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
for(int i=0;i<2;i++)
scanf("%lf%lf%lf%lf",&data[i].a.x,&data[i].a.y,&data[i].b.x,&data[i].b.y); if(judge(0,1))
printf("Interseetion\n");
else
printf("Not Interseetion\n");
}
return 0;
}
第五题国王的烦恼
时间限制:3000 ms 内存限制:65535 KB 难度:★★
描述
C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。
两个小岛间可能存在多座桥连接。
然而,由于海水冲刷,有一些大桥面临着不能使用的危险。
如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。
然而,只要这两座小岛的居民能通过其他的桥或者其他的小岛互相到达,他们就会安然无事。
但是,如果前一天两个小岛之间还有方法可以到达,后一天却不能到达了,居民们就会一起发起抗议。
现在C国的国王已经知道了每座桥能使用的天数,超过这个天数就不能使用了。
现在他想知道居民们一共会发起多少次抗议。
输入
多组测试数据。
每组数据先输入两个正整数n和m。
接下来m行,每行三个整数a, b, t,分别表示该座桥连接a号和b号两个小岛,能使
(1≤n≤10000,1≤m≤100000,1<=a,b<=n,1≤t≤100000)用t天。
小岛的编号从1开始递增。
输出
输出一个整数,表示居民们发起抗议的次数。
样例输入
4 4
1 2 2
1 3 2
2 3 1
3 4 3
样例输出
2
提示
对于样例:
第一天后2和3之间的桥不能使用,不影响。
第二天后1和2之间,以及1和3之间的桥不能使用,居民们会抗议。
第三天后3和4之间的桥不能使用,居民们会抗议。
测试输入
4 4
1 2 2
1 3 2
2 3 1
3 4 3
4 4
1 2 2
1 4 2
2 3 1
3 4 3
4 6
1 2 2
1 4 2
2 3 1
3 4 3
1 3 2
2 4 5
2 1
1 2 5
6 8
1 2 5
3 4 6
5 6 9
1 3 1
3 5 2
2 6 7
1 5 3
1 4 2
7 9
1 2 5
3 4 6
5 6 9
1 3 1
3 5 2
2 6 7
1 5 3
1 4 2
3 7 2
4 3
1 3 9
1 4 8
1 2 3
5 3
1 3 9
1 5 8
1 2 3
3 5
1 3 2
1 3 4
1 3 6
1 2 5
2 3 6 测试输出
2
2
3
1
5
5
3
3
1
参考代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef struct data
{
int a;
int b;
int t;
}data;
int node[10001];
data dt[100001];
int find(int xx)
{
if(xx == node[xx])
{
return xx;
}
else
{
return node[xx] = find(node[xx]);
}
}
bool cmp(data xx,data yy)
{
return xx.t > yy.t;
}
int main()
{
int n,m;
int i;
int qian = -9999;
int sum;
int fa;
int fb;
while(scanf("%d%d",&n,&m) != EOF)
{
for(i=0;i<10001;i++)
{
node[i] = i;
}
sum = 0;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&dt[i],&dt[i].b,&dt[i].t);
}
sort(dt,dt+m,cmp);
qian = -9999;
for(i = 0;i < m; i++)
{
fa = find(dt[i].a);
fb = find(dt[i].b);
if(fa != fb)
{
node[fa] = fb;
if(qian != dt[i].t)
{
qian = dt[i].t;
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}
第六题分西瓜
时间限制:3000 ms 内存限制:65535 KB 难度:★★★★
描述
今天是11月25日,acm队员小菜的生日。
小菜正在和小李,小红在ACM集训。
他想给这两位朋友买点什么庆祝生日,经过调查,小菜发现小李和小红都很喜欢吃西瓜,而且一吃就是一堆的那种,小菜立刻下定决心买了一堆西瓜。
当他准备把西瓜送给小李和小红的时候,遇到了一个难题,小李和小红不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小。
每个西瓜的重量已知,你能帮帮他么?
输入
多组测试数据(<=1500)。
数据以EOF结尾
第一行输入西瓜数量N (1 <= N <= 20)
第二行有N个数,W1, …, Wn (1 <= Wi <= 10000)分别代表每个西瓜的重量
输出
输出分成两堆后的质量差
样例输入
5
5 8 13 27 14
样例输出
3
测试输入:
5
5 8 13 27 14
5
1 2 3 4 5
6
1 1 1 1 1 1
2
1 86
3
1 86 87
20
5 8 13 27 14 1 2 3 4 5 5 8 13 27 14 5 8 13 27 14
10
1 100 9999 25 1563 2546 1111 2225 2563 11
5
1 998 995 996 998
15
1 998 995 996 998 1 998 995 996 998 1
2
3
4 5
12
9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 1
11
9999 9999 9999 9999 9999 9999 9999 9999 9999 10 11
5
5 8 13 27 14
5
1 2 3 4 5
6
1 1 1 1 1 1
2
1 86
3
1 86 87
20
5 8 13 27 14 1 2 3 4 5 5 8 13 27 14 5 8 13 27 14
10
1 100 9999 25 1563 2546 1111 2225 2563 11
5
1 998 995 996 998
15
1 998 995 996 998 1 998 995 996 998 1
2
3
4 5
12
9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 1
11
9999 9999 9999 9999 9999 9999 9999 9999 9999 10 11
9
5 6 8 4 2 1 65 9 12
20
9999 9999 9999 9999 9999 9999 9999 9999 9999 10 11 5 6 8 4 2 1 65 9 12 5
5 8 13 27 14
5
1 2 3 4 5
6
1 1 1 1 1 1
2
1 86
3
1 86 87
20
5 8 13 27 14 1 2 3 4 5 5 8 13 27 14 5 8 13 27 14
10
1 100 9999 25 1563 2546 1111 2225 2563 11
5
1 998 995 996 998
15
1 998 995 996 998 1 998 995 996 998 1
2
3
4 5
12
9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 1
11
9999 9999 9999 9999 9999 9999 9999 9999 9999 10 11
5
5 8 13 27 14
5
1 2 3 4 5
6
1 1 1 1 1 1
2
1 86
3
1 86 87
20
5 8 13 27 14 1 2 3 4 5 5 8 13 27 14 5 8 13 27 14
10
1 100 9999 25 1563 2546 1111 2225 2563 11
5
1 998 995 996 998
15
1 998 995 996 998 1 998 995 996 998 1
2
3
4 5
12
9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 1
11
9999 9999 9999 9999 9999 9999 9999 9999 9999 10 11
9
5 6 8 4 2 1 65 9 12
20
9999 9999 9999 9999 9999 9999 9999 9999 9999 10 11 5 6 8 4 2 1 65 9 12 测试输出
3
1
85
54
1
9998
9978
3
1
85
54
1
9998
9978
18
9866
3
1
85
54
1
9998
9978
3
1
85
54
1
9998
9978
18
9866
代码
#include<iostream>
#include<cstring>
using namespace std;
#define maxsize 100100 #define maxsize1 21
#define max(a,b) a>b?a:b int dp[maxsize];
int main()
{
int m;
while (cin>> m)
{
int sum = 0;
int i, j, c[maxsize1];
memset(dp, 0, sizeof(dp));
for (i = 0; i<m; i++)
{
cin>> c[i];
sum += c[i];
}
for (i = 0; i<m; i++)
{
for (j = sum / 2; j >= c[i]; j--)
{
dp[j] = max(dp[j], dp[j - c[i]] + c[i]);
}
}
cout<< sum - dp[sum / 2] * 2 <<endl;
}
return 0;
}
第七题小狗狗
时间限制:3000 ms 内存限制:65535 KB 难度:★★
描述
兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发。
以每分钟Y米的速度去追弟弟,而狗则以每分钟Z米的速度向弟弟跑去,追上弟弟后又立即返回,直到哥哥追上弟弟时,狗跑了多少米?
输入
第一行输入一个整数N,表示测试数据的组数(N<100)
每组测试数据占一行,是四个正整数,分别为M,X,Y,Z(数据保证X<Y<Z)
输出
输出狗跑的路径,结果保留小数点后两位。
样例输入
1
5 10 15 20
样例输出
200.00
测试输入
14
5 10 15 20
5 1 5 10
1 2 3 4
2 3 4 5
4 5 6 7
7 8 9 10
15 2 5 8
26 3 5 4
25 2 6 9
5 3 5 7
6 3 5 9
2 12 19 22
3 3
4 6
36 9 11 19
测试输出
200.00
12.50
8.00
30.00
140.00
560.00
80.00
156.00
112.50
52.50
81.00
75.43
54.00
3078.00
参考代码
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
int m,x,y,z;
cin >> n;
int i;
for(i=0;i<n;i++)
{
cin >> m >> x >> y >> z;
cout << setiosflags(ios::fixed) << setprecision(2) << 1.0*m*x*z/(y-x) << endl;
}
return 0;
}。