最小平均等待时间
题目描述
有n个顾客同时在等待一项服务,顾客i需要的服务时间为ti,1≤i≤n。要安排一个服务次序使得平均等待时间最小(平均等待时间是n个顾客等待服务时间的总和除以n)。请编写算法,计算最小平均等待时间。
输入
第一行为测试用例个数m,m≤1000。 第二行开始为m个测试用例,每个测试用例由一组空格间隔的整数组成,第一个整数n为顾客的人数,后面n个整数为每个顾客需要的服务时间t,0<m≤1000,0<t≤1000。
输出
对每个测试用例,输出最小平均等待时间的整数部分(舍去小数部分),每个输出占一行。
样例输入 复制
2
5 15 9 3 14 3
10 13 3 12 9 6 9 1 91 44 32
样例输出 复制
10
36
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m;
cin>>m;
while(m--)
{
int n;
int a[1005];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int total=0;
for(int i=0;i<n;i++)
total+=a[i]*(n-i-1);
cout<<total/n<<endl;
}
}
最少货币支付问题
题目描述
现行的货币体系为(1、2、5、10、20、50、100),请设计算法,计算要用最少的货币数支付指定金额N,每种货币需要使用的数量。
输入
第一行为测试用例个数n,n≤1000。 后面n行,每行为一个测试用例,每个测试用例为一个大于0的整数目标金额m,0≤m≤10000。
输出
对每个测试用例,输出一行由空格间隔的7个整数,分别表示1元、2元、5元、10元、20元、50元、100元所使用的数量。
样例输入 复制
2
15
189
样例输出 复制
0 0 1 1 0 0 0
0 2 1 1 1 1 1
#include<bits/stdc++.h>
int main()
{
int n,N;
scanf("%d",&N);
while(N--)
{
int a=0,b=0,c=0,d=0,e=0,f=0,g=0;
scanf("%d",&n);
while(n>=100)
{
g=g+1;
n=n-100;
}
while(n>=50&&n<100)
{
f=f+1;
n=n-50;
}
while(n>=20&&n<50)
{
e=e+1;
n=n-20;
}
while(n>=10&&n<20)
{
d=d+1;
n=n-10;
}
while(n>=5&&n<10)
{
c=c+1;
n=n-5;
}
while(n>=2&&n<5)
{
b=b+1;
n=n-2;
}
if(n>0&&n<2)
{
a=1;
}
printf("%d %d %d %d %d %d %d\n",a,b,c,d,e,f,g);
}
}
活动安排
有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?
#include<bits/stdc++.h>
using namespace std;
struct Task
{
int s;
int f;
}task[1005];
bool comparsion(Task a,Task b)
{
return a.f<b.f;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>task[i].s>>task[i].f;
sort(task,task+n,comparsion);
int cnt=1;
int finish=task[0].f;
for(int i=1;i<n;i++)
{
if(task[i].s>=finish)
{
cnt++;
finish=task[i].f;
}
}
cout<<cnt;
}
数列极差
题目描述
佳佳的老师在黑板上写了一个由 n 个正整数组成的数列,要求佳佳进行如下操作:每次擦去其中的两个数 a 和 b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数为止,在所有按这种操作方式最后得到的数中,最大的为max,最小的为 min, 则该数列的极差定义为 M=max−min。
由于佳佳忙于准备期末考试,现请你帮助他,对于给定的数列,计算出相应的极差 M。
输入格式
第一行为一个正整数 n 表示正整数序列的长度;
在接下来的 n 行中,每行输入一个正整数。
接下来的一行有一个 0,表示数据结束。
输出格式
输出只有一行,为相应的极差 d。
样例
样例输入
3
1
2
3
0
样例输出
2
#include<bits/stdc++.h>
using namespace std;
int jicha()
{
int n;
cin>>n;
int a[50005];
for(int i=0;i<n;i++)
cin>>a[i];
int b;
cin>>b;
long long min=a[n-1],max=a[0];
sort(a,a+n);
for(int i=1;i<n;i++)
max=max*a[i]+1;
for(int i=n-2;i>=0;i--)
min=min*a[i]+1;
cout<<max-min<<endl;
}
int main()
{
long long a[50005],b[50005];
int n;
cin>>n;
long long maxx,minn;
for(int i=0; i<n; i++)
{
cin>>a[i];
b[i]=a[i];
}
int x;
cin>>x;
sort(a,a+n);
sort(b,b+n);
for(int i=n-1; i>0; i--) //计算min
{
a[i-1]=a[i]*a[i-1]+1;
sort(a,a+i);
}
minn=a[0];
for(int i=0; i<n-1; i++) //计算max
{
b[i+1]=b[i]*b[i+1]+1;
sort(b+i+1,b+n);
}
maxx=b[n-1];
cout<<maxx-minn<<endl;
}