5月2日,9:00-12:00,西工大校赛
Posted chengxvzhishen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5月2日,9:00-12:00,西工大校赛相关的知识,希望对你有一定的参考价值。
1.A题:
比赛的时候WA了7次,导致排名较低。
WA的7次都是用暴力和STL做的。
正确思路:先用计数法记录员工所在的号数,然后遍历数组,找到每一个工位之前的号数和与员工数量和,最后将所有工位用a,mid,b分成四部分,对每一部分求ans即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
int arr[maxn+1]={0};
int num[maxn+1]={0};
int hao[maxn+1]={0};
int main()
{
int n,q,i,j,k,a,b,m;
scanf("%d%d",&n,&q);
for(i=0;i<n;i++)
{
scanf("%d",&j);
arr[j]++;
}
for(i=2;i<=maxn+1;i++)
{
hao[i]=hao[i-1]+arr[i-1]*(i-1);
num[i]=num[i-1]+arr[i-1];
}
while(q--)
{
scanf("%d%d",&a,&b);
if(a>b)
{
int tem=a;
a=b;
b=tem;
}
int ans=0;
int mid=(a+b)/2;
ans+=a*num[a]-hao[a];
ans+=(hao[mid+1]-hao[a+1])-a*(num[mid+1]-num[a+1]);
ans+=b*(num[b]-num[mid+1])-(hao[b]-hao[mid+1]);
ans+=(hao[maxn+1]-hao[b+1])-b*(num[maxn+1]-num[b+1]);
printf("%d
",ans);
}
return 0;
}
以上是关于5月2日,9:00-12:00,西工大校赛的主要内容,如果未能解决你的问题,请参考以下文章