我们队解出了三道题,感觉难度与平时的比赛相当。不足还是算法模板以及对一些数据的处理上面。
Problem 1003:
这题是我做的。根据题意,可以将快递所在的快递柜分成两部分,一部分是在特殊快递柜前面的快递柜,另一部分是在特殊快递柜后面的快递柜。对于在后面的快递柜,我们可以发现无论先取哪一个快递,最终所花费的距离都是一样的;而对于在前面的快递,只有按照编号从大到小的顺序取快递所花费的距离才是最小的。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[1000000+8];
int main()
{
int t,i,j,m;
ll n,k;
cin>>t;
while(t--)
{
ll dis=0;
scanf("%lld%d%lld",&n,&m,&k);
for(i=0;i<m;i++)
{
scanf("%lld",&a[i]);
}
sort(a,a+m);
dis=k-1;
for(i=m-1;i>=1;i--)
{
if(a[i]>k)
{
dis+=a[i]-k;
dis+=a[i]-k;
}
else
{
dis+=k-a[i];
dis+=k-a[i];
}
}
if(a[0]<k)
{
dis+=k-1;
}
else
{
dis+=a[0]-k;
dis+=a[0]-1;
}
printf("%lld ",dis);
}
return 0;
}
Problem 1007:
这道题是李勇麒负责做的。比赛时我们并没有读懂题意,所以直接看样例,通过样例可以发现,每一个样例的结果都是字符串中出现次数最多的字母的出现次数,所以我们只需要输出所给字符串中出现次数最多的字母的次数即可。
Problem 1010:
模拟题,照着题意模拟就行了。
系统没法提交代码了,不知道自己写的对不对,就不上传了。