您的位置:首页 > 理论基础 > 计算机网络

北京林业大学“计蒜客”杯程序设计竞赛 网络赛 乘电梯

2016-04-24 19:55 567 查看
题目回忆版:

小白乘电梯,大楼里有n部电梯可用,小白在第m层,已知每部电梯有它的换乘楼层,也就是经过的楼层会停下来,已知电梯每上升一层或下降一层耗时5秒,停在某一层耗时15秒,求小白需要等待的时间。

【数据】:

input

3 5

2 10 20

3 4 5 6

0

2 7 9

ouput

30 25 105

【思路】:

将可用电梯与当前楼层区间有换乘的楼层标记即可

【代码】:

#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn = 1e6+10;
const int maxm = 55;
const LL MOD = 999999997;
inline LL read()
{
int  c=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
c=c*10+ch-'0';
ch=getchar();
}
return c*f;
}
int c[maxm],Map[maxm][maxm],Save[maxm*maxm][4];

int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}

int Eular(int n)
{
int ret =1;
for(int i=2; i*i<=n; ++i)
{
if(n%i==0)
{
ret *= (i-1);
n/=i;
while(n%i==0)
{
ret*=i;
n/=i;
}
}
}
if(n>1) ret*=(n-1);
return ret;
}

int Get_divisor_sum(int n)
{
int sum=0;
for(int i=2; i*i<=n; ++i)
{
if(n%i==0)
{
sum+=i;
if(n/i!=i) sum+=n/i;
}
}
sum++;
return sum;
}

LL Quick_Mod(LL a,LL b,LL MOD)
{
LL ans=a,ret=1;
while(b)
{
if(b&1) ret = ret*ans%MOD;
b>>=1;
ans=ans*ans%MOD;
}
return ret;
}
struct node
{
int idx,sum;
} lc[1000];
int main()
{
int n,m;
// freopen("1.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1; i<=n; i++) lc[i].idx=read();
int ans[1000],v,x;
for(int j=1; j<=n; j++)
{
v=read();
int tp[1000]= {0};
for(int k=1; k<=v; k++)
{
x=read();
tp[x]=1;
}
int sum=0;
if(lc[j].idx>m)
{
for(int ll=lc[j].idx-1; ll>m; --ll)
{
if(tp[ll]) sum+=15;
}
sum+=(lc[j].idx-m)*5;
}
else if(lc[j].idx<m)
{
for(int ll=lc[j].idx+1; ll<m; ++ll)
{
if(tp[ll]) sum+=15;
}
sum+=(m-lc[j].idx)*5;
}
else sum=0;
lc[j].sum=sum;
}
for(int i=1; i<n; i++)
printf("%d ",lc[i].sum);
printf("%d\n",lc
.sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: